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
- c++
- 상수변수
- Interface
- cocos2d-x
- Stack
- 게임엔진
- 스레드
- 예외처리
- Exception
- unity
- 반복문
- 프로그래밍
- c++게임엔진
- 데이터타입
- singleton
- cocos2dx
- C/C++
- 예외던지기
- java
- 동기화블럭
- Thread
- Class함수
- interface상속
- cocos2d
- 문자열
- 데이터베이스
- 입출력
- db
- oracle
- c#
Archives
- Today
- Total
초보 프로그램 개발자
[ 4주차 ] Java - 내부클래스 본문
내부클래스
내부 클래스는 클래스 안에 또 클래스를 만드는것을 말한다.
내부클래스를 만드는 방법은 4가지가 있다고 배웠는데, 1~3번째 방법은 많이 사용하지 않고
4번째 방법은 사용한다고 얘기해 주셨다.
- 첫번째 방법 (Inner)
class Outer1 {
static int a = 10;
int b = 20;
// Outer1이 객체생성이 안되면 Inner1도 생성이 안된다.
// Outer1이 생성 됐다고 해서 Inner1이 생성이 되는것은 아니다.
public class Inner1 {
int c = 30;
public void write() {
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
public void print() {
Inner1 ob = new Inner1();
ob.write();
}
}
public class Test1 {
public static void main(String[] args) {
// 필수
Outer1 out = new Outer1();
// inner 사용 1번째 방법
out.print();
System.out.println("---------------");
// 2번째 방법 외부클래스가 만들어진 상태에서만 가능
Outer1.Inner1 inner = out.new Inner1();
inner.write();
}
}
Outer1 클래스 안의 Inner1클래스를 생성하여 write라는 함수를 print에서 사용하였다.
main절에서 1번째 방법은 Outer1 객체를 생성하여 print 함수를 사용하였고,
Inner1 클래스 안의 write함수는 main절에서 사용하기 위하여 2번째 방법을 사용하였다.
2번째 방법을 사용할 때에는 꼭 Outer1 클래스 객체를 생성해주어야 한다.
- 두번째 방법 (Local)
class Outer2{
static int a = 10;
int b = 20;
public void write() {
//로컬변수
int c = 30;
final int D = 40;
//로컬클래스
class Inner2{
public void print() {
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(D);
}
}
Inner2 ob = new Inner2();
ob.print();
}
}
public class Test2 {
public static void main(String[] args) {
Outer2 out = new Outer2();
out.write();
}
}
2번째 방법으로는 메소드 안에 클래스 생성이다. 메소드 안의 변수는 로컬변수로 클래스 또한 로컬클래스로 생성된다.
- 세번째 방법 (중첩)
class Outer3{
static int a = 10;
int b = 20;
public static class Inner3{ // static이라 Outer3모다 먼저 메모리에감
int c = 30;
public void write() {
System.out.println(a);
//System.out.println(b); // b는 static이 아니여서 사용 불가
System.out.println(c);
Outer3 ob = new Outer3(); // static클래스 안에서 객체 생성했기때문에
System.out.println(ob.b); // b 사용 가능
}
}
public void print() {
Inner3 in = new Inner3();
in.write();
}
}
public class Test3 {
public static void main(String[] args) {
Outer3 out = new Outer3();
out.print();
Outer3.Inner3 inner = new Outer3.Inner3();
inner.write();
}
}
Outer 클래스 안에서 static Inner클래스를 생성하여 Outer 클래스보다 먼저 메모리에 올라가게 만들어준 뒤,
Inner 클래스 안에서 Outer클래스의 객체를 생성하여 사용하였다.
- 네번째 방법 (익명, 무명, Annonymous)
public class Test4 {
public Object getTitle() {
return new Object() {
@Override
public String toString() {
return "익명의 클래스";
}
}; // 세미콜론 꼭 찍어주어야 한다
}
public static void main(String[] args) {
Test4 ob = new Test4();
System.out.println(ob.getTitle());
}
}
가장 많이 쓰인다는 네번째 방법은 람다식과 비슷하다.
아직 정확히 이해를 하지 못해 더 공부가 필요하다.
'교육 일지 > java' 카테고리의 다른 글
[ 4주차 ] Java - ArrayList (0) | 2023.05.25 |
---|---|
[ 4주차 ] Java - Collection - Vector (0) | 2023.05.23 |
[ 4주차 ] Java - interface상속 (0) | 2023.05.22 |
[ 4주차 ] Java - interface (0) | 2023.05.22 |
[ 4주차 ] Java - 추상클래스(abstract) (0) | 2023.05.22 |