정적 중첩 클래스의 활용
정적 중첩 클래스로 리팩토링 전
NetworkMessage.java
// Network 객체 안에서만 사용
public class NetworkMessage {
private String content;
public NetworkMessage(String content) {
this.content = content;
}
public void print() {
System.out.println(content);
}
}
Network.java
public class Network {
public void sendMessage(String text) {
NetworkMessage networkMessage = new NetworkMessage(text);
networkMessage.print();
}
}
NetWorkMain.java
public class NetworkMain {
public static void main(String[] args) {
Network network = new Network();
network.sendMessage("hello java");
}
}
=> network를 생성하고 sendMessage()를 통해 메시지를 전달한다.
networkMain은 Network 클래스만 사용할 뿐 NetworkMessage 클래스는 전혀 사용하지 않는다. NetworkMessage는 Network 내부에서만 사용된다.
개발자가 패키지를 열어본다고 가정하자. Network 관련 라이브러리를 사용하기 위해서 패키지를 열어본 개발자는 두 개의 클래스(Network, NetworkMessage) 를 모두 사용하려고 할 것이다. 그러나 실제로는 Network만 사용하면 된다.
이번에는 코드를 리팩토링 해보자.
정적 중첩 클래스로 리팩토링 후
Network.java
public class Network {
public void sendMessage(String text) {
NetworkMessage networkMessage = new NetworkMessage(text);
networkMessage.print();
}
private static class NetworkMessage {
private String content;
public NetworkMessage(String content) {
this.content = content;
}
public void print() {
System.out.println(content);
}
}
}
NetworkMessage 클래스를 중첩해서 생성했다.
접근제어자를 private으로 설정했기 때문에 외부에서는 NetworkMessage에 접근할 수 없다. 내부에서만 사용하겠다는 의도가 느껴지지 않는가.
Main.java
public class NetworkMain {
public static void main(String[] args) {
Network network = new Network();
network.sendMessage("hello java");
}
}
=> 결과는 동일하다. NetworkMessage가 중첩 클래스의 private 접근 제어자로 설정되어 있으므로, 다른 개발자가 로직을 확인할 때 Network 클래스에서만 사용하는 중첩 클래스임을 바로 인지할 수 있다.
* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.
'프로그래밍언어 > Java' 카테고리의 다른 글
[Java 중급] 내부 클래스 (0) | 2024.09.03 |
---|---|
[Java 중급] 정적 중첩 클래스 (0) | 2024.09.03 |
[Java 중급] 중첩 클래스, 내부 클래스 (0) | 2024.09.03 |
[Java 중급] 열거형 - Enum Type (4) | 2024.08.29 |
[Java 중급] 타입 안전 열거형 패턴 (0) | 2024.08.29 |