공부만이 살길

자바 객체지향 프로그래밍 - 인터페이스 (Interface) 쉽게 이해하기 (2) 본문

Java

자바 객체지향 프로그래밍 - 인터페이스 (Interface) 쉽게 이해하기 (2)

공부만이 살길이야 2024. 1. 25. 15:55
반응형
SMALL

 

저번 포스팅에서는 위와 같은 Program을 통해 total을 출력할 때,

인터페이스를 활용해서 Class A와 B의 결합도를 낮추는 것 까지 진행했습니다.

 

이번 포스팅에서는 현재 상황에서 Program의 문제점과 이를 개선하는 방안을 알려드리도록 하겠습니다.

 

현재의 Program 코드를 보면, B b = new B(); 를 통해, A가 결합하여 사용하는 Interface X가 참조하는 B를

Program에서 생성자를 통해 지정하고 있는 것을 알 수 있습니다.

 

그런데, Interface X가 더 나은 Class C를 만들게 되어, 이 Class를 교체하여 사용하는 경우를 한번 가정해볼까요?

 

 

위의 상황처럼 Program의 코드까지 변경해야 하는 상황이 오게 됩니다.

이런 경우에는 유지보수를 하기에는 정말 어려움이 따르게 됩니다.

 

그렇기 때문에 Interface가 참조하는 Class 에 대해서 외부파일인 XML 혹은 Annotation을 통해 제어해주게 되는데요.

가장 간단한 일반 파일 형식을 활용하여 이러한 코드 분리를 구현해보도록 하였습니다.

 

 

여기 새로운 Class C가 있습니다, 마찬가지로 X가 정의해놓은 메소드를 실제로 구현하는 클래스이고,

우리는 Program에서 이제 B가 아닌 C클래스를 사용하기로 합니다.

 

Program의 코드도 변경하지 않고, 유지보수를 간단히 하기 위해서는 먼저 setting.txt 를 만들어줍니다.

 

txt 파일에는, 사용할 클래스의 경로를 작성해줍니다. 패키지부터의 경로를 작성해주면 됩니다.

현재 Interface를 통해 Program은 B 클래스를 결합해 사용하고 있으므로, 먼저 B를 작성해서 테스트 해보겠습니다.

 

 

Program 에서는 B를 직접적으로 생성하지 않을 것이므로, 주석처리를 하고

우리가 생성했던 텍스트 파일을 파일입출력을 통해 불러와 셋팅해야합니다.

FileInputStream 과 Scan을 활용해서, 텍스트 파일의 내용을 String 형의 변수에 담아 출력해봅니다.

 

 

FileInputStream 객체를 생성할 때에는, 경로를 setting.txt의 경로로 설정해줍니다.

Scanner 객체를 생성하고 scan.nextLine() 라이브러리 메소드를 통해 텍스트 파일의 내용을 가져옵니다.

 

 

위와 같이 정상적으로 텍스트파일의 내용이 출력된 것을 확인할 수 있습니다.

 

자 이제는, 가져온 외부 파일의 클래스네임을 활용하여 인터페이스를 셋팅해주고 Program을 실행하면 됩니다.

마찬가지로 항상 하던대로 생성자를 통해서 생성하면 되겠죠?

 

 

엥, 안되네요. 사실 안되는게 당연하다고 합니다.

scan.nextLine()을 통해 가져온 문자를 String 형의 변수에 저장했으므로

X x = new "인터페이스.B"; 와 같습니다.

 

그러므로, 문자열이 아니라 정상적으로 연산자를 생성할 수 있도록 Class 라고 하는 Class를 통해서

Class.forName을 사용하면, Class에 대한 정보를 얻을 수 있습니다.

 

따라서 이렇게 코드를 수정해보세요.

 

 

Class Clazz 라는 Class 객체에 ClassName에 해당하는 Class 정보를 저장하고

 

 

Class 클래스의 newInstance() 메소드를 활용하여

Interface X 의 인스턴스를 생성합니다. 단, 이 때 형식을 Interface 형식으로 형변환 해줍니다.

 

이후 a.setX(x) 를 통해 인터페이스를 세팅해주고, print() 메소드를 실행하면

외부 셋팅 파일의 클래스명을 셋팅하여 정상적으로 출력되는 것을 알 수 있습니다.

 

 

자 이제 유지보수 측면에서 만일 Program이 Interface를 통해 B가 아닌 C class를 끼워 사용하고 싶다고 하면 어떻게 하면 될까요?

이제 Class C로 외부파일에서 변경만 해주게 된다면 바로 변경이 되어 출력됩니다.

 

이처럼 Interface는 Java programming 에 있어서 정말 중요한 요소이고

코드 분리, 유지 보수에 있어 정말 뛰어난 효율성을 지닌 기능입니다.

 

같은 프로그램 안에서 여러번 Class가 사용될 때, 코드의 유지보수를 더욱 효율적이고게

할 수 있도록 도우므로 개발자로서 필수적인 역량 중 하나라고 볼 수 있습니다.

 

 

 

공부자료 :  [뉴렉처 자바 객체지향 강의 33강]

반응형
LIST