IoC 를 이용한 중국어 - 영어 정보 전환

JavaBeginner
지금 연습하기

소개

이 프로젝트에서는 Inversion of Control (IoC, 제어의 역전) 디자인 패턴과 Spring 프레임워크를 사용하여 간단한 중국어 - 영어 메시지 전환 시스템을 구현하는 방법을 배우게 됩니다.

👀 미리보기

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.056 s - in com.labex.TestGreeting
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.295 s
[INFO] Finished at: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다:

  • doMessage() 추상 메서드를 가진 IMessage 인터페이스를 생성하는 방법
  • IMessage 인터페이스를 MessageCNMessageEN 두 개의 구체 클래스에서 구현하는 방법
  • applicationContext.xml 파일을 사용하여 메시지 빈을 구성하는 방법
  • TestGreeting 클래스에서 메시지 전환 기능을 테스트하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • IoC 디자인 패턴을 사용하여 메시지 기능의 구현을 주 애플리케이션에서 분리합니다.
  • Spring 프레임워크를 사용하여 메시지 빈을 구성하고 관리합니다.
  • 단위 테스트를 작성하여 메시지 전환 시스템의 기능을 검증합니다.

IMessage 인터페이스 생성

이 단계에서는 반환 값이 없는 doMessage()라는 추상 메서드를 포함하는 IMessage 인터페이스를 생성합니다.

  1. com.labex 패키지에 IMessage.java라는 새 Java 파일을 생성합니다.
  2. 파일 내에서 다음 코드를 사용하여 IMessage 인터페이스를 정의합니다.
package com.labex;

// 메시지 기능을 위한 인터페이스
public interface IMessage {
    // 메시지 표시를 위한 메서드 시그니처
    void doMessage();
}

이 인터페이스는 메시지 기능을 구현하려는 모든 클래스에 대한 기본 구조를 정의합니다. doMessage() 메서드는 구체적인 메시지 클래스에서 구현될 추상 메서드입니다.

MessageCN 클래스 생성

이 단계에서는 IMessage 인터페이스를 구현하는 MessageCN 클래스를 생성합니다. 이 클래스는 msg 속성을 가지며 get/set 메서드를 제공합니다. 또한 doMessage() 메서드를 재정의하여 문자열 "你好,Labex"를 출력합니다.

  1. com.labex 패키지에 MessageCN.java라는 새 Java 파일을 생성합니다.
  2. 파일 내에서 다음 코드를 사용하여 MessageCN 클래스를 정의합니다.
package com.labex;

// 중국어 메시지를 위한 IMessage 인터페이스 구현
public class MessageCN implements IMessage {
    private String msg; // 메시지를 저장하는 변수

    // 메시지를 검색하기 위한 getter 메서드
    public String getMsg() {
        return msg;
    }

    // 메시지를 설정하기 위한 setter 메서드
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // IMessage 인터페이스의 doMessage 메서드 구현
    @Override
    public void doMessage() {
        // 중국어로 인사 메시지 출력
        System.out.println("你好," + msg);
    }
}

MessageCN 클래스는 IMessage 인터페이스를 구현하고 중국어로 인사 메시지를 출력하는 doMessage() 메서드의 구현을 제공합니다.

MessageEN 클래스 생성

이 단계에서는 IMessage 인터페이스를 구현하는 MessageEN 클래스를 생성합니다. 이 클래스는 msg 속성을 가지며 get/set 메서드를 제공합니다. 또한 doMessage() 메서드를 재정의하여 문자열 "hello,Labex"를 출력합니다.

  1. com.labex 패키지에 MessageEN.java라는 새 Java 파일을 생성합니다.
  2. 파일 내에서 다음 코드를 사용하여 MessageEN 클래스를 정의합니다.
package com.labex;

// 영어 메시지를 위한 IMessage 인터페이스 구현
public class MessageEN implements IMessage {
    private String msg; // 메시지를 저장하는 변수

    // 메시지를 검색하기 위한 getter 메서드
    public String getMsg() {
        return msg;
    }

    // 메시지를 설정하기 위한 setter 메서드
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // IMessage 인터페이스의 doMessage 메서드 구현
    @Override
    public void doMessage() {
        // 영어로 인사 메시지 출력
        System.out.println("Hello, " + msg);
    }
}

MessageEN 클래스는 IMessage 인터페이스를 구현하고 영어로 인사 메시지를 출력하는 doMessage() 메서드의 구현을 제공합니다.

applicationContext.xml 설정 파일 생성

이 단계에서는 위에서 생성한 JavaBeans를 구성하고 구성에서 msg 속성 정보를 전달하기 위해 applicationContext.xml 구성 파일을 생성합니다.

  1. src/main/resources 디렉토리에 applicationContext.xml이라는 새 파일을 생성합니다.
  2. 파일 내에 다음 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 id="messageCN" class="com.labex.MessageCN">
  <!-- MessageCN 빈의 'msg' 속성을 "Labex"로 설정 -->
  <property name="msg" value="Labex"/>
 </bean>

 <!-- 영어 메시지 빈에 대한 구성 -->
 <bean id="messageEN" class="com.labex.MessageEN">
  <!-- MessageEN 빈의 'msg' 속성을 "Labex"로 설정 -->
  <property name="msg" value="Labex"/>
 </bean>

</beans>

이 구성 파일은 MessageCNMessageEN 빈을 설정하고 해당 msg 속성을 "Labex" 값으로 초기화합니다.

TestGreeting 클래스 생성

이 단계에서는 TestGreeting 클래스를 생성하고 테스트 작업을 수행하기 위해 testGreeting()이라는 테스트 메서드를 추가합니다.

  1. com.labex 패키지에 TestGreeting.java라는 새 Java 파일을 생성합니다.
  2. 파일 내에서 다음 코드를 사용하여 TestGreeting 클래스를 정의합니다.
package com.labex;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestGreeting {

    @Test
    public void testGreeting() {
        // XML 구성 파일에서 Spring 애플리케이션 컨텍스트 로드
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 컨텍스트에서 메시지 빈 검색
        IMessage messageCN = (IMessage) context.getBean("messageCN"); // 중국어 메시지 빈
        IMessage messageEN = (IMessage) context.getBean("messageEN"); // 영어 메시지 빈

        // 중국어 메시지 빈에서 'doMessage' 메서드 호출
        messageCN.doMessage();

        // 영어 메시지 빈에서 'doMessage' 메서드 호출
        messageEN.doMessage();

        context.close();
    }
}

TestGreeting 클래스는 applicationContext.xml 파일에서 Spring 애플리케이션 컨텍스트를 로드하고, MessageCNMessageEN 빈을 검색한 다음, 해당 doMessage() 메서드를 호출하여 기능을 테스트합니다.

이제 IoC 를 통한 중국어 - 영어 정보 전환 프로젝트를 생성하기 위한 모든 단계를 완료했습니다. 이제 테스트를 실행하고 예상 출력을 확인할 수 있습니다.

  1. 테스트 실행:
cd ~/project/SpringGreeting/
mvn test

테스트는 통과해야 하며 다음과 같은 출력을 볼 수 있습니다.

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.labex.TestGreeting
你好,Labex
Hello, Labex
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.056 s - in com.labex.TestGreeting
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.295 s
[INFO] Finished at: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습