중첩클래스 활용

2025. 5. 7. 12:28·JAVA
public class Network {
    public void sendMessage(String text) {
        // 여기서 new NetworkMessage(text) 함
        NetworkMessage networkMessage = new NetworkMessage(text);
        networkMessage.print();
    }

    // 중첩 클래스를 static으로 선언함
    private static class NetworkMessage {
        private String content;

        public NetworkMessage(String content) {
            this.content = content;
        }

        public void print() {
            System.out.println(content);
        }
    }
}

 

헷갈렸던 부분 정리

 

static 메소드는 '클래스'에 붙는 기능이다.

  • static 메소드는 객체(인스턴스)를 만들지 않고도 클래스 이름으로 바로 호출할 수 있는 기능이다.
  • 특정 객체의 상태(인스턴스 필드)에 접근할 수 없음. 객체 없이 호출이 가능하기에 어떤 객체의 필드인지 알 수 없기 때문이다.

static 클래스는 '클래스 안에 있는 클래스'에 붙는 속성

  • 내부 클래스에 static이 붙은 이유는 바깥 클래스의 '객체(인스턴스)' 없이도 이 안쪽 클래스의 객체를 만들 수 있게 해주려고
    • static이 안 붙은 일반 중첩 클래스는 바깥클래스객체.new 안쪽클래스() 이런 식으로 바깥 클래스 객체가 있어야만 안쪽 클래스 객체를 만들 수 있다. 또한 일반 중첩 클래스는 바깥 클래스 객체의 인스턴스 멤버에 접근이 가능하다.
    • static 중첩 클래스는 new 바깥클래스이름.정적중첩클래스이름() 또는 바깥 클래스 내부에서 new 정적중첩클래스이름() 이런식으로 바깥 클래스 객체 없이도 바로 객체를 만들 수 있다. 대신 바깥 클래스의 인스턴스 멤버에는 직접 접근하지 못한다. 
      • 다만 new 바깥클래스이름.정적중첩클래스이름() 이런식으로 호출하고 있다면 이미 잘못된 코드일 가능성이 있다. 이렇게 사용하면 외부에서 사용할 필요가 있다는 것이기에 두 개의 클래스로 분리하는 것이 맞을 것이다.

 NetworkMessage는 여전히 하나의 클래스 그리고 print() 메소드는 NetworkMessage 클래스의 인스턴스 메소드야. 인스턴스 메소드는 객체(인스턴스)가 있어야만 호출할 수 있어.

코드 new NetworkMessage(text);는 NetworkMessage 클래스의 '객체'를 새롭게 만드는 코드.

 new를 써서 NetworkMessage 객체(networkMessage)를 만들었기 때문에, 그 다음에 networkMessage.print()처럼 그 객체의 인스턴스 메소드를 호출할 수 있는 것

만약 NetworkMessage 클래스 안에 static 메소드가 있었다면 (예: public static void someUtilityMethod()), 그걸 호출할 때는 new NetworkMessage() 할 필요 없이 NetworkMessage.someUtilityMethod() 이렇게 바로 호출했을 거임.

 

 

 

'JAVA' 카테고리의 다른 글

[Spring] 전략 패턴 구현, 스프링 빈 모두 불러오기 활용  (0) 2025.05.21
중첩 내부 클래스  (0) 2025.05.14
날짜와 시간  (0) 2025.05.07
SOLID 원칙  (0) 2025.04.15
Optional orElse(), orElseGet() 차이점  (0) 2025.04.06
'JAVA' 카테고리의 다른 글
  • [Spring] 전략 패턴 구현, 스프링 빈 모두 불러오기 활용
  • 중첩 내부 클래스
  • 날짜와 시간
  • SOLID 원칙
Ark B
Ark B
  • Ark B
    기록
    Ark B
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • 개인 프로젝트 정리 (1)
      • JAVA (9)
      • CS (7)
      • 프로젝트 정리 (6)
        • 인턴 (5)
        • 졸업프로젝트 (0)
      • 코딩테스트 (1)
      • 클린 코드 (3)
      • 책 정리 (1)
        • Effective Java (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Ark B
중첩클래스 활용
상단으로

티스토리툴바