본문 바로가기
JAVA

JAVA | 인터페이스 장점, 내부 클래스

by 개발송이 2022. 2. 11.

7.7 인터페이스의 장점

-개발 시간을 단축할 수 있다.

-변경에 유리한 유연한 설계가 가능하다.

-표준화가 가능하다.

-서로 관계없는 클래스들을 관계를 맺어줄 수 있다.

 

7.9 디폴드 메서드와 static메서드

-인터페이스에 디폴트 메서드, static 메서드 추가 가능(JDK1.8부터)

-인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움

  해결책-> 디폴트 메서드

-디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)

-디폴트 메서드가 기존의 메서드와 충돌할 때 해결책

   1. 여러 인터페이스의 디폴트 메서드 간의 충돌

      -인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.

   2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌

     - 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

 

 

8. 내부 클래스 inner class

 

8.1 내부 클래스란?

-클래스 안의 클래스의 멤버들을 쉽게 접근할 수 있다.

-코드의 복잡성을 줄일 수 있다. (캡슐화)

class A {  //B의 외부 클래스
   '''
   class B {  //A의 내부 클래스
       '''    //객체 생성 없어도 A의 멤버 접근 가능함     
       }
       '''
  }

 

8.2 내부 클래스의 종류와 특징

-내부 클래스의 종류와 유효범위(scope)는 변수와 동일

iv - instance class

cv- static class

lv - local class 각각 매칭 됨

 

instance class - 외부클래스의 멤버변수 선언위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다뤄짐

                     주로 외부클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언됨

static class - 외부 클래스의 멤버변수 선언 위치에 선언, 외부클래스의 static멤버처럼 다뤄짐

                 주로 외부클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언 됨

local class - 지역변수처럼 선언된 영역 내부에서만 사용가능

 

*annoymous class (익명클래스) - 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용)

 

 

8.3 내부 클래스의 선언

class Outer {
    class InstanceInner { }
    static class StaticInner { }
    
    void myMethod() {
        class LocalInner { } //메서드 영역
    }
} //클래스 영역

8.4 내부 클래스의 제어자와 접근성

-내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일 (4개 다 사용가능)

 

class Ex31 {
	class InstanceIneer {  //인스턴스 내부클래스
		int iv = 100;
		static int cv = 100;  //에러 - static변수를 선언할 수 없다
		final static int CONST = 100;  //final static은 상수이므로 허용
	}
	
	static class StaticIneer {  //static내부클래스
		int iv = 200;
		static int cv = 200;  //static클래스만 static멤버를 정의할 수 있다.(객체생성 없이 사용 가능해야하기 때문)
	}  //static내부 클래스에서는 외부 클래스의 인스턴스 멤버에 접근할 수 없다.
	
	void myMethod() { 
		class LocalIneer { //지역내부클래스
			int iv = 300;
			static int cv = 300;  //에러
			final static int CONST = 300;
		}
	}
}

 

8.5 익명클래스 anonymous class

-이름이 없는 일회용 클래스. 정의와 생성을 동시에

new 조상클래스이름() {
	//멤버선언
}
	또는
new 구현인터페이스이름() {
	//멤버선언
} //자기 이름 없으니까 조상꺼나 인터페이스 이름씀

 

'JAVA' 카테고리의 다른 글

JAVA | java.lang 패키지  (0) 2022.02.14
JAVA | 예외처리  (0) 2022.02.12
JAVA | 추상클래스, 인터페이스  (0) 2022.02.10
JAVA | final 상수  (0) 2022.02.06
JAVA | 재귀호출, 변수의 초기화  (0) 2022.02.05