다양한 형태의 클래스 선언 방법
1. 일반적인 선언 방법
==> 하나의 자바 파일에 class 키워드를 작성하여 클래스 선언.
// 1. 일반적인 선언 방법
// Sub 객체 생성
Sub sub = new Sub();
System.out.println
("sum() 메서드 호출 >>> " + sub.sum(200, 15));
System.out.println
("minus() 메서드 호출 >>> " + sub.minus(127, 15));
System.out.println();
결과
sum() 메소드 호출 : 202
minus() 메소드 호출 : 198
2. 무명 클래스(anonymous class) 선언
==> 이름이 없이 없는 클래스 선언. interface 객체 생성 시 많이 사용됨.
package inner;
interface Inter {
int sum(int n1 , int n2);
int minus(int n1, int n2);
}
class Sub implements Inter {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
return n1 - n2;
}
}
public class Ex01 {
public static void main(String[] args) {
// 2. 무명 클래스(annonymous class) 선언
Inter inter = new Inter() {
@Override
public int sum(int n1, int n2) {
return n1 + n2;
}
@Override
public int minus(int n1, int n2) {
return n1 - n2;
}
};
System.out.println
("sum() 메소드 호출 : " + sub.sum(200,2));
System.out.println
("minus() 메소드 호출 : " + sub.minus(200, 2));
}
}
결과
sum() 메소드 호출 : 202
minus() 메소드 호출 : 198
3. 중첩 클래스(inner class) 선언
==> 클래스 안에 또 다른 클래스 선언
* 중첩 클래스(inner class)
이너 클래스 혹은 중첩 클래스는 하나의 클래스로, 클래스나 인터페이스 내부에서 선언한다.
코드를 더 읽기 쉽고, 더 오래 유지 하기 위해, 논리적인 그룹과 인터페이스들에서 이너클래스를 사용한다.
추가로, 이너클래스는 개인적인 데이터 멤버와 메소드를 포함하는 외부 클래스의 모든 멤버들에 접근할 수 있다.
1. 클래스 내부에 또 다른 클래스 선언
==> 두 클래스가 서로 긴밀한 관계로 연결되어 있는 경우 사용.
두 클래스 멤버 간에 서로 쉽게 접근할 수 있다는 장점이 있음.
2. 내부 클래스를 하나의 멤버로 사용할 수 있음.
3. 클래스 멤버 : 멤버 변수, 멤버 메소드, 외부 클래스, 내부 클래스
4. 내부 클래스 객체 생성 방법
형식)
외부클래스명.내부클래스명 참조변수 = 외부클래스의 참조변수.new 내부클래스 생성자();
내부 클래스의 특징
- 내부 클래스는 외부 클래스의 멤버를 마치 자기 자신처럼 사용 가능함.
외부 클래스 멤버의 접근 지정자가 private 접근 지정자일지라도 접근 가능.
- 내부 클래스의 접근은 반드시 외부 클래스를 통하여 접근해야 함.
class Outer { // 외부 클래스
final int su1 = 50;
private int su2 = 33;
class Inner { // 내부 클래스
void output() {
// su1 = 178; => final로 선언하면 한번 초기화된 변수는 변경할 수 없는 상수값이 됨
su2 = 100;
System.out.println("su1 >>> " + su1);
System.out.println("su2 >>> " + su2);
} // output() 메소드 end
} // 내부 클래스 end
} // 외부 클래스 end
public class Ex02 {
public static void main(String[] args) {
// 중첩 클래스 객체 생성 방법
// 1. 외부(Outer) 클래스 객체가 우선적으로 생성.
Outer outer = new Outer();
// 2. 내부(Inner) 클래스 객체 성성.
// 형식 : 외부클래스명.내부클래스명 참조변수 = 외부클래스의 참조변수.new 내부클래스 생성자();
Outer.Inner inner = outer.new Inner();
inner.output();
}
}
결과
su 1 : 50
su 2 : 100
외부클래스에서 선언한 변수를 내부 클래스에서 접근, 이용가능 한 것을 볼 수 있다.
(그게 private로 선언한 변수일지라도)
다만 final로 선언한 su1 변수는 final로 지정하여 변경이 불가능함. => 에러발생
'Back-End > Java' 카테고리의 다른 글
[JAVA] 싱글톤(singleton) 방식으로 객체 생성하기 (0) | 2021.09.17 |
---|---|
[Java] 래퍼 클래스(wrapper class) (0) | 2021.09.17 |
[Java] Object 클래스 (0) | 2021.09.16 |
[Java] 스코프와 this (0) | 2021.08.27 |
[Java] 캡슐화(Encapsulation)_getter와 setter (0) | 2021.08.26 |
댓글