Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 1로 만들기
- 백준
- 다이나믹 프로그래밍
- 2020 KAKAO BLIND
- 고모네 콩탕
- 맛집 투어
- Spring
- HTTP API
- 호유동
- 양꼬치
- mvc
- 2638
- 포두부 보쌈
- 설탕 배달
- 동적 프로그래밍
- 스프링 MVC
- 2589
- 완도산회
- dp
- 쓰레드 풀
- 알고리즘
- 프로그래머스
- Servlet
- 스프링
- BFS
- 맛집
- 문자열 압축
- 서블릿
- 투어
- 2839
Archives
- Today
- Total
프로그래밍 공방
[Java의 정석] Chapter 10. 내부 클래스 / inner class 본문
inner class : 내부 클래스
클래스 내에 선언된 클래스
내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.
1 2 3 4 5 | class A { // 외부 클래스 class B { // 내부 클래스 //... } } | cs |
내부 클래스의 종류와 특징
내부 클래스의 종류는 변수의 선언 위치에 따른 종류와 같다.
내부 클래스의 선언
내부 클래스가 선언된 위치에 따라 종류가 나뉜다.
1 2 3 4 5 6 7 8 | class Outer { class InstanceInner{} static class StaticInner{} void myMethod() { class LocalInner{} } } | cs |
내부 클래스의 제어자와 접근성
1. 내부 클래스도 클래스이기 때문에 abstract나 final과 같은 제어자를 사용할 수 있다.
- 내부 클래스 중에서 스태틱 클래스만 static 멤버를 가질 수 있다.
- final과 static이 동시에 붙은 변수는 상수(constant)이므로 모든 내부 클래스에서 정의가 가능하다.
- 인스턴스 클래스는 외부 클래스의 인스턴스 멤버를 객체생성 없이 바로 사용할 수 있지만,
- 스태틱 클래스는 외부 클래스의 인스턴스 멤버를 객체생성 없이 사용할 수 없다. (내부 클래스의 멤버도 마찬가지)
2. 내부 클래스도 멤버 변수들처럼 private, protected와 같이 접근 제어자도 사용이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Outer { private int outerIv = 0; static int outerCv = 0; class InstanceInner { int iiv = outerIv; // 외부 클래스의 private 멤버도 접근가능하다. int iiv2 = outerCv; } static class StaticInner { // 스태틱 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 없다. // int siv = outerIv; static int scv = outerCv; } void myMethod() { int lv = 0; final int LV = 0; class LocalInner { int liv = outerIv; int liv2 = outerCv; // 외부 클래스의 지역변수는 final이 붙은 변수(상수)만 접근가능하다. // int liv3 = lv; 에러 int liv4 = LV; } } } | cs |
익명 클래스
클래스의 선언과 객체의 생성을 동시에 하는 이름이 없는 클래스(하나의 객체만을 생성할 수 있는 일회용 클래스)
- 이름이 없기 때문에 생성자도 없다.
- 오직 하나의 클래스를 상속받거나 하나의 인터페이스만을 구현할 수 있다.
1 2 3 4 5 6 7 8 | class Annonymous { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(new Comparator<Integer>() { // 익명 클래스 @Override public int compare(Integer arg0, Integer arg1) { return Integer.compare(arg0, arg1); } }); } | cs |
'개발 > Java' 카테고리의 다른 글
[Java의 정석] Chapter 7. 다형성 / Polymorphism (0) | 2021.02.01 |
---|---|
[Java의 정석] Chapter 7. 제어자 / Modifier (0) | 2021.01.24 |
[Java의 정석] Chapter 7. 상속 / Inheritance (0) | 2021.01.10 |
[Java의 정석] Chapter 6. 객체지향 프로그래밍 1 (1) | 2021.01.03 |