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
- 코딩
- Java문자열 클래스
- DBMS
- Java객체배열
- 자바 문자열 클래스
- java super( )
- 자바 try-catch
- 자바 내부 클래스
- Java 추상 메서드
- 자바 예제
- dbeaver
- database
- Java다운캐스팅
- Java try-catch
- db
- 오라클
- 자바 추상메서드
- nodejs
- 자바 제어문
- Java thorw
- 자바 Random클래스
- 자바 String클래스
- oracle
- Express
- Java업캐스팅
- 자바 스트링클래스
- Java추상클래스
- Java 내부 클래스
- 데이터베이스
- 자바 Wrapper클래스
Archives
- Today
- Total
코딩이란 무엇일까
[Java/자바]내부 클래스,익명 클래스 본문
안녕하세요 오늘은 자바에서 클래스 안에 클래스가 있는 내부 클래스에 대해 알아보겠습니다!
내부 클래스
내부클래스는 클래스 안에 또 다른 클래스가 있는 것을 말합니다.
내부 클래스(Inner class)의 구조
class OuterClass{
class InnerClass{
}
}
내부 클래스(Inner Class)의 사용목적
⇒클래스 간의 관계가 긴밀할 때 사용하여 코드를 간결하게 하기 위해 사용합니다.
내부 클래스의 종류
- 인스턴스 클래스
- 스태틱 클래스
- 지역 클래스
- 익명 클래스
내부 클래스는 클래스가 있는 위치에 따라 달라집니다.
1. 인스턴스 클래스
- 외부 클래스에서 멤버 변수 위치에 선언
- 클래스의 내부에서 인스턴스(객체) 멤버처럼 다뤄지며, 인스턴스 멤버들과 상호작용이 가능합니다.
[구조]
class OuterClass{
class InnerClass{
}
}
2. 스태틱(static) 클래스
- 외부 클래스에서 멤버 변수 위치에 선언, 인스턴스 클래스와 똑같은 위치이지만 클래스 앞에 static이 붙여졌다는 게 핵심
- 클래스 내부에서 static멤버처럼 다뤄지며 static멤버처럼 다뤄지고 static멤버들과 상호작용 가능
class OuterClass{
static class InnerClass{
}
}
인스턴스 클래스, 스태틱 클래스 예시 코드
클래스 부분
class OuterClass{
int a=3;
static int b=4;
class Inner{
int c=5;
public void innerMethod() {
System.out.println("<Inner class>");
}
}
static class StaticInner{
int d=6;
static int stat=10;
public static void staticMethod() {
System.out.println("<Static Inner>");
}
}
}
내부 클래스는 위치가 중요합니다. 외부 클래스의 멤버 변수 위치에 존재합니다.
따라서 static이 붙지 않은 Inner 클래스는 인스턴스 클래스
Static이붙은 StaticInner은 Static클래스가 됩니다.
메인 메서드
public class Inner {
public static void main(String[] args) {
OuterClass oc=new OuterClass();
System.out.println("OuterClass A의 값:"+oc.a);
System.out.println("OuterClass B의 값:"+OuterClass.b);
System.out.println("===inner 클래스 접근하기===");
OuterClass oc2= new OuterClass();
OuterClass.Inner i=oc2.new Inner();
System.out.println("Inner의 c값:"+i.c);
i.innerMethod();
OuterClass.StaticInner si= new OuterClass.StaticInner();
System.out.println("StaticInner의 d의 값:"+si.d);
si.staticMethod(); //=> static멤버는 객체를 생성하지 않고도 클래스명을 사용해서 호출 가능
OuterClass.StaticInner.staticMethod();
}
}
내부 클래스의 객체를 생성하기 위해서는
외부클래스.내부클래스명 객체명 = new 외부클래스 생성자.내부클래스 생성자();
위와 같이 객체를 생성해 주어야 합니다.
출력 결과
보이는 바와 같이 외부 클래스, 내부 클래스 둘 다 잘 출력이 되는 것을 볼 수 있습니다.
3. 지역 클래스
- 메서드 내부 지역변수 위치에 선언
- 메서드나 촉기화 블록의 내부에서 다뤄지며 선언된 영역 내부에서 사용
[구조]
class OuterClass{
void A(){
class InnerClass{
...
}
}
}
지역 클래스는 위와 같이 클래스 안에 있는 메서드 안에 위치합니다.
내부 클래스의 접근성
⇒ 내부 클래스도 클래스이기 때문에 선언부에 접근제어자 즉, private, protected와 같은 접근제어자를 사용할 수 있다.
'Java' 카테고리의 다른 글
[Java/자바]예외처리 throw,throws (0) | 2022.10.06 |
---|---|
[Java/자바]예외처리 try-catch-finally (0) | 2022.10.06 |
[자바/Java]인터페이스(interface) (1) | 2022.10.05 |
[Java/자바]추상 메서드와 추상 클래스 (0) | 2022.10.05 |
[Java/자바]다형성(polymorphism),업캐스팅(Upcasting),다운캐스팅(Downcasting) (0) | 2022.10.02 |
Comments