Nested Class

엉엉 자바는 어려워·2022년 8월 3일
0

Nested Classes란❔

다른 클래스 안에 내포된 클래스
어떤 클래스를 해당 클래스에서만 사용하기 위해

장점

  1. 캡슐화 가능
  2. 가독성과 유지보수성이 좋음

종류

static

  1. static nested class

Non-static

  1. 일반적인 Inner class : 메소드 안에 들어가 있지 않음
  2. (Named) Local class : 메소드 안에 만들어졌는데 이름이 존재
  3. Anonymous class : 메소드 안에 만들어졌고 이름이 존재하지 않음

static nested class

  • Outer 클래스의 객체가 없어도 Inner 클래스의 객체 생성이 가능하다.
class Outer {
    변수;
    메소드;

    public static class Inner {

    }
}

Outer.Inner 객체 = new Outer.Inner();

Inner class

  • Inner Class의 객체를 만들려면 Outer 클래스의 객체를 먼저 만들어야한다.
  • static 멤버를 정의하거나 선언할 수 없다.
class Outer {
    변수;
    메소드;

    public class Inner {

    }
}

Outer out객체 = new Outer();
Outer.Inner inn객체 = new out객체.new Inner();

Local class

  • 블록 내에 정의된 내부 클래스이다.
    -> 블록 : {} 안에 감싸진 영역 ex) 반복문, 메소드, if문 등
  • 접근 제어자를 사용할 수 없고 자신을 둘러싸는 클래스의 멤버에 접근이 가능하다. 여기서 메소드의 지역변수에 접근하기 위해선 해당 메소드의 지역 변수가 final로 선언되어 있거나 중간에 값이 다시 초기화되선 안된다.
class Outer { 
	public void method() {
		final int x = 10; // int x =10; 이라도 중간에 값 변경만 없으면 됨
		class Local {
			public void method() {
				System.out.println(x);
			}
		}
	}
}

Anonymous class

  • 메소드 안에 클래스를 한 번만 만들고 싶을 때 사용
  • 외부 자원은 final 키워드가 붙은 것만 사용할 수 있다. -> final 달면 선언가능
  • 함수형 인터페이스 : 인터페이스 안에 메소드가 한 개만 존재
interface Student {
  public void getInfo();
}

public class Test {
  public static void main(String[] args) {

    Student student = new Student() {

      public void getInfo() {
        System.out.println("anonymous class");
      }
    };
    student.getInfo();
  }
}

Serialize(직렬화)

객체의 직렬화는 인스턴스 안에 들어있는 변수를 byte로 변환하는 것 파일이나 네트워크에 보내기 위해
자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술이다
Inner Class에는 사용해선 안된다.

0개의 댓글