열심히 끝까지
[코딩 과제] - 9/13 강사님 문제 본문
== Watch 인터페이스를 만들어서 대입해라!
-----------------Phone.java[Phone 인터페이스]
package test;
public interface Phone {
public void powerOn();
public void powerOff();
public void volumeUp();
public void volumeDown();
}
-----------------Watch.java[Watch 인터페이스]
package test;
public interface Watch {
public void volumeUp();
public void volumeDown();
}
-----------------AppleWatch.java
package test;
public class AppleWatch implements Watch {
public AppleWatch() {
System.out.println("애플워치 객체생성완료");
}
@Override
public void volumeUp() {
System.out.println("애플워치 ++");
}
@Override
public void volumeDown() {
System.out.println("애플워치 --");
}
}
-----------------GalaxyWatch.java
package test;
public class GalaxyWatch implements Watch {
public GalaxyWatch() {
System.out.println("갤럭시워치 객체생성완료");
}
@Override
public void volumeUp() {
System.out.println("갤럭시 워치 ++");
}
@Override
public void volumeDown() {
System.out.println("갤럭시 워치 --");
}
}
-----------------IPhone.java
package test;
public class IPhone implements Phone{
private Watch watch;
// 애플워치로 소리를 업,다운 한다고 가정
private int battery;
public IPhone() {
System.out.println("아이폰 객체생성완료");
}
public IPhone(Watch watch) {
// 미리 선언해주면 객체화 안해줘도 괜찮음
System.out.println("아이폰 객체 생성완료22");
this.watch=watch;
}
public IPhone(Watch watch, int battery) {
System.out.println("아이폰 객체 생성완료333");
this.battery=battery;
System.out.println("아이폰 전원 On : " + battery);
this.watch=watch;
}
public void powerOn() {
System.out.println("아이폰 전원 ON");
}
public void powerOff() {
System.out.println("아이폰 전원 OFF");
}
public void volumeUp() {
// System.out.println("아이폰 소리++");
// watch = new AppleWatch();
// 객체화를 할 수 밖에 없음
// 이 것을 IoC 지원을 받아 처리해보기
watch.volumeUp();
}
public void volumeDown() {
// System.out.println("아이폰 소리--");
// watch = new AppleWatch();
// 객체화를 할 수 밖에 없음
watch.volumeDown();
}
}
-----------------Galaxy.java
package test;
public class Galaxy implements Phone{
public void initMethod() {
System.out.println("객체를 초기화하는 작업을 처리하는 메서드...");
// bean할 때 불러오는 것 가능
}
public void destroyMethod() {
System.out.println("객체 메모리를 해제할 때 호출하는 메서드...");
// bean할 때 불러오는 것 가능
}
private Watch watch;
private int battery;
public Galaxy(){
System.out.println("갤럭시 객체 On");
}
public Galaxy(Watch watch, int battery) {
System.out.println("갤럭시 객체 + 배터리 생성");
this.battery=battery;
System.out.println("갤럭시 전원 On : " + battery);
this.watch = watch;
}
// @Override 진행된 것
public void powerOn() {
System.out.println("갤럭시 전원 ON");
}
public void powerOff() {
System.out.println("갤럭시 전원 OFF");
}
public void volumeUp() {
// System.out.println("갤럭시 소리++");
watch.volumeUp();
}
public void volumeDown() {
// System.out.println("갤럭시 소리--");
watch.volumeDown();
}
}
-----------------applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- IPhone을 설정하면 main/java의 IPhone에 s 불이 들어옴 -->
<!-- 소속 클래스로 변경 -->
<!-- test뒤에 IPhone을 Galaxy로도 변경 가능, 이 부분 덕분에 new 하지 않아도 결과 출력 -->
<bean id="phone" class="test.Galaxy" init-method="initMethod" destroy-method="destroyMethod"/>
<!-- 디폴트 설정으로 singleton이 들어감 -->
<!-- 여러개를 쓰는게 맞을 때, scope에 prototype으로 작성 -->
<!-- <bean id="iphone" class="test.IPhone" lazy-init="true" scope="singleton"/> -->
<!-- 생성자 인젝션 : 기존의 기본생성자를 쓰던 방법이 아니라서 tag로 인자를 알려주어야 함 + 객체 생성해야 함 -->
<!-- 컨테이너의 관리에 들어가게 됨 -->
<bean id="iphone" class="test.IPhone">
<!-- 인자를 알아서 맞춰줌 -->
<constructor-arg ref="aw"/>
<constructor-arg value="99"/>
</bean>
<bean id="aw" class="test.AppleWatch"/>
<bean id="gw" class="test.GalaxyWatch"/>
</beans>
-----------------Client.java
package test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class Client {
public static void main(String[] args) {
// Spring 컨테이너를 동작시킬 수 있도록 코드 작성
AbstractApplicationContext factory=new GenericXmlApplicationContext("applicationContext.xml");
// Spring 컨테이너야, 나 폰 객체가 필요해(아이폰 객체 가지고 싶어..)!
// 형변환 필요 == Lookup == 객체요청 : 컨테이너야, 가지고 있는 객체중에서 이름이 "phone"인 객체를 줘!
Phone phone=(Phone)factory.getBean("phone");
phone.powerOn();
phone.volumeUp();
phone.volumeDown();
phone.powerOff();
factory.close();
/*
BeanFactory bf = new BeanFactory();
Phone phone = (Phone)bf.getBean("galaxy");
phone.powerOn();
phone.volumeUp();
phone.volumeDown();
phone.powerOff();
*/
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(과제)' 카테고리의 다른 글
[코딩 과제] - 9/26 강사님 문제 : 검색 기능 + DAO2 적용 (0) | 2022.09.27 |
---|---|
[코딩 과제] - 9/14 강사님 문제 (0) | 2022.09.14 |
능력단위평가 - 오류처리 (0) | 2022.08.11 |
[코딩 과제] - 8/4 강사님 문제 (0) | 2022.08.04 |
[코딩 과제] - 8/2 강사님 문제 (0) | 2022.08.02 |