( •̀ ω •́ )✧
[Java] 인터페이스의 구현 - 코드 수정을 없애기 위한 설정 본문
※ 본 내용은 강의를 수강하며 정리한 글입니다 👉 강의 링크
https://heyitzme.tistory.com/38
[Java] 인터페이스의 구현
※ 본 내용은 강의를 수강하며 정리한 글입니다 👉 강의 링크 초기 상태 초기 상태는 위와 같다. main class인 Program과 A, B가 결합력이 강한 상태로 결합되어 있다. 위 코드를 도식화하면 이 그림과
heyitzme.tistory.com
위 글에서는 인터페이스를 통해 A 객체와 결합될 객체를 B, C, ... 로 자유롭게 대체할 수 있다는 가능성까지 제시하였다.
하지만 여전히, B를 C로 대체하기 위해서는 main class의 코드 수정이 불가피하다.
만약 교체가 자주 일어나는 객체의 자리라면, 아래와 같이 설정 부분을 외부 파일로 빼내고 코드는 유지할 수 있다.
📁 setting.txt
ex6.B
먼저 사용할 클래스의 패키지로부터의 경로를 .
로 구분하여 써준다.
지금은 B 객체를 사용한다.
📁 class Program (main class)
package ex6;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
FileInputStream fis = new FileInputStream("src/ex6/setting.txt");
Scanner scan = new Scanner(fis);
String className = scan.nextLine();
// System.out.println(className); = "ex6.B;"
// 읽어온 후 scan, fis는 close 처리
scan.close();
fis.close();
A a = new A();
// Class.forName() : class 정보를 읽어옴
Class clazz = Class.forName(className);
// .newInstance() : class 정보 clazz를 X의 인스턴스로 만들어 줌
X x = (X) clazz.getDeclaredConstructor().newInstance();
a.setX(x);
a.print();
}
}
main class에서 해줘야 하는 설정은 위와 같다.
간략히 setting.txt
파일에서 클래스 이름을 읽어오고, 클래스 이름에서 class 정보를 얻어 인스턴스로 변환하는 것이다.
이는 결국 B b = new B();
와 같은 기능을 한다.
📁 setting.txt
ex6.C
그러므로 B 객체 대신 C를 사용하고 싶다면 소스코드를 바꿀 필요 없이 txt 파일의 클래스명만 바꿔주면 된다.
소스코드를 C c = new C();
로 바꾸는 대신 txt 파일만 고쳐준 것이다.
'✏️ 노트 > java' 카테고리의 다른 글
[Java] 인터페이스의 구현 - 기본 (1) | 2023.11.02 |
---|---|
인터페이스의 이해 (0) | 2023.11.01 |
05. 문자와 문자열 (0) | 2023.08.17 |
04. 상수와 리터럴 (0) | 2023.08.17 |
03. 변수의 타입 - 기본형 (0) | 2023.08.17 |
Comments