코딩항해기

[과제/Spring] Spring 기초연습 (워치 만들기) 본문

problem solving/과제&실습 코딩

[과제/Spring] Spring 기초연습 (워치 만들기)

miniBcake 2024. 10. 1. 13:44

 

 

[intellij]

 

두 가지의 워치를 만들어 전원을 키고 끄는 메서드를 구현해보자

  • 결합도를 낮출 것
  • Spring 컨테이너를 활용할 것
  • 메인메서드 매개변수 String[] args를 활용할 것
  • int-method를 설정할 것
  • scope를 설정할 것 (기본 singleton)
  • lazy-init를 설정할 것

 

먼저 결합도를 낮추기 위해 인터페이스를 활용해 오버라이딩 할 수 있다.

인터페이스를 활용해 구현부를 강제하면 업캐스팅해 사용할 수도 있고 메서드 시그니처를 통일 할 수 있다.

 

워치 인터페이스

package test;

public interface Watch {
    void turnOn();
    void turnOff();
}

 

 

사과워치

package test;

public class AppleWatch implements Watch {
    //생성자
    public AppleWatch(){
        System.out.println("AppleWatch");
    }

    //전원 온
    @Override
    public void turnOn() {
        System.out.println("Apple watch is on");
    }

    //전원 오프
    @Override
    public void turnOff() {
        System.out.println("Apple watch is off");
    }
}

 

우주워치

package test;

public class GalaxyWatch implements Watch {
    //생성자
    public GalaxyWatch(){
        System.out.println("Galaxy Watch 생성자 실행");
    }
    
    //init으로 초기화하기도 한다 (생성자가 없는 종류들의 경우)
    void initWatch(){
        System.out.println("init을 이용한 필드값 초기화");
    }
    
    //전원 온
    @Override
    public void turnOn() {
        System.out.println("Galaxy Watch is ON");
    }

    //전원 오프
    @Override
    public void turnOff() {
        System.out.println("Galaxy Watch is OFF");
    }
}

 

 

Client

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");
        
        //매개변수로 받아온 첫 번째 워치
        Watch watch = (Watch) factory.getBean(args[0]);
        //전원 온 오프
        watch.turnOn();
        watch.turnOff();
        
        //매개변수로 받아온 두 번째 워치
        Watch watch2 = (Watch) factory.getBean(args[1]);
        //전원 온 오프
        watch2.turnOn();
        watch2.turnOff();
    }
}

 

 

Spring 컨테이너의 설정을 작성하는 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">
    <bean class="test.AppleWatch" id="appleWatch" scope="singleton" />
    <bean class="test.GalaxyWatch" id="galaxyWatch" scope="singleton" lazy-init="true" init-method="initWatch" />
</beans>

 

 

Configurations 설정

 

 

실행