ch07. 내부 클래스 (객체지향 프로그래밍 추가정리)

yuju9·2022년 2월 14일
1

자바의 정석 스터디

목록 보기
11/18

중첩클래스(내부클래스) ?

  • 클래스 내에 선언된 클래스
  • 비유
    집(외부 클래스)이 있으면 그 집 안에 침실과 욕실, 부엌(내부 클래스)이 있는걸로 볼 수 있다.
class House {

    class Bedroom {
		void sleep() {}
	}
	
	class Bathroom {
        void wash() {}
    }

    class Kitchen {
        void cook() {}
    }
}

내부 클래스를 왜 사용하는가?

  1. 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
  2. 서로 관련있는 클래스를 한 곳에 묶음으써, 한 클래스에 같은 책임을 한데 묶을 수 있다.

내부클래스 장점

  • 소스의 가독성과 유지보수성을 높임
  • 코드의 복잡성을 줄임(캡슐화)

중첩클래스 - 내부클래스

  • 중첩 클래스는 정적 및 비 정적의 두 가지 범주로 나뉩니다. static으로 선언 된 중첩 클래스를 정적 중첩 클래스라고합니다. 정적이 아닌 중첩 클래스를 내부 클래스라고합니다.

정적 중첩 클래스(Static Nested Class)

  • static 으로 선언
  • 밖에 있는 클래스의 변수와 static 메소드를 사용 O
class Outer { 
	변수; 
    메소드; 
    public static class Inner { } 
}

내부클래스 (Inner Class / Non-Static Inner Class)

  • 내부클래스로서 일반클래스 내부에 생성
  • 밖에 있는 클래스는 내부클래스를 멤버변수처럼 사용 O (사용하려면 new로 인스턴스를 만들어야한다.)
class Outer { 
	변수; 
    메소드; 
    public class Inner { } 
}

지역 클래스(Local Inner Class)

  • 메소드 내부에 클래스를 정의하는 경우로, 메소드 내의 지역변수처럼 쓰임
  • 메소드 밖에서 사용X
class Outer {
  인스턴스 요소;
  메서드1() {}
  
  메서드2() {
  	class Inner {
    	인스턴스 요소;    
        //정적 요소 (x)
    }
    Inner in = new Inner();
    in.필드 = 3;
    in.메서드();
  }
  //여기선 접근할 수 없음. 메서드2() 외부이기 때문.
}

익명클래스(Anonymous Inner Class)

  • 이름이 없는 한 번 사용하고 버려지는 클래스
  • 클래스의 선언과 동시에 객체 생성
  • 클래스 명이 존재하지 않기 때문에 상속하여 재정의해서 사용
Object iv = new Object() { void method(){} }

참고

https://insight-bgh.tistory.com/21
https://sjh836.tistory.com/145
https://jwdeveloper.tistory.com/m/21

0개의 댓글

관련 채용 정보