Day 35

ChangWoo·2023년 5월 10일
0

자바의 정석

목록 보기
35/71

ch 7-40,41 디폴트 메서드와 static메서드

디폴트 메서드와 static메서드

인터페이스에 디폴트 메서드, static메서드 추가 가능(JDK1.8부터)
인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움.
Ex) Object -> ..... -> 인터페이스 일 때,
interface ~~~ {boolean isfinished(추상메서드)}를 추가하려고 할 때, 인터페이스는 추상메서드를 추가하면 기존의 인터페이스를 구현하던 클래스에 새로운 추상메서드를 작성해야 한다.
해결책 -> 디폴트 메서드(default method)
디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)

  • 인터페이스에 메서드를 추가하면, 무조건 추상메서드가 된다.
  • 그런데, 추상메서드를 추가하면, 인터페이스를 구현한 클래스에도 다 적어줘야 하기 때문에
    몸통이 있는 default method가 생겼다.
    디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책
  1. 여러 인터페이스의 디폴트 메서드 간의 충돌
  • 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야 한다.
  1. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
  • 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

ch 7-42~44 내부 클래스의 종류, 특징, 선언

내부 클래스(inner class)

클래스 안의 클래스

class A {			 class A { // (B의) 외부 클래스
	...					...
}				->		class B { // (A의) 내부 클래스
class B {					...
	...					}
}						... 
					  }
  • 내부 클래스의 장점
    - 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
    • 코드의 복접성을 줄일 수 있다.(캡슐화)
  • 내부 클래스가 없다면, B가 A의 객체를 생성해야 사용 가능
  • 내부 클래스가 있다면, B가 A의 객체를 생성하지 않아도 A의 멤버에 접근 가능하다.
  • class B가 class A 안에서만 사용된다면, 굳이 밖에 둘 이유가 없기 때문에 내부클래스로 만든다.

내부 클래스의 종류와 특징

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

class Outer {						class Outer {
	int iv = 0;							class InstanceInner {}
   static int cv = 0;		<->			static class StaticInner {}
   void myMethod() {					void myMethod() {
   	int lv = 0;							class LocalInner {}
   }									}
}									}
  • 왼쪽 코드 변수의 종류 : 1.iv 2.cv 3.lv
  • 오른쪽 코드 변수의 종류 : 1.클래스 영역에 선언된 내부 클래스(=iv) 2.static내부클래스(=cv) 3.메서드 안에 지역변수처럼 선언된 내부클래스(=lv)
  • 세 가지의 내부 클래스는 세 가지의 변수의 특징과 같다.
  • iv = 클래스 내부에서 사용 가능 / Instance class = Outer 클래스 영역 내부에서 사용 가능
  • cv = 클래스 내부에서 사용 가능 / staticInner = Outer 클래스 영역 내부에서 사용 가능 (staticInner는 Outer 객체를 생성하지 않고 사용 가능)
  • lv = 메서드 내부에서 사용 가능 / LocalInner = 메서드 영역 내에서만 사용 가능
  • 익명 클래스 = 딱 한번만 사용하고 안 쓰는 클래스가 있는데, 그런 경우에 클래스 선언을 해서 사용 후 안 쓴다. (=이벤트 처리에 사용)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글