본문 바로가기
개발일지/일간회고 (TIL)

자바(Java) Interface, Stream, Optinal

by 윤승임 2022. 12. 1.

인터페이스 (Interface)

다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스

다만 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만, 인터페이스는 오로지 추상 메소드와 상수만을 포함

자바는 클래스를 통한 다중 상속은 지원하지 않지만, 인터페이스를 통해 다중 상속을 지원

* 필드: 클래스 안에서 독립적으로 선언되는 변수

 

장점

클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.

클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간 단축

일관되고 정형화된 개발을 위한 표준화 가능


인터페이스의 선언

(접근제어자) interface (인터페이스 이름) {

	// 상수
	(final/static : 지우라고뜸) 타입 상수명(대문자 convention) = 값;
	String HI = "Hi~";

	// 추상 메서드
	List<String> findAllName();

	// Default 메소드
	default 타입 메소드명(파라미터,...) {...}
	default void printHi() {
		System.out.println(HI);
	}

	// static 메소드
	static void printHi() {
		System.out.println(HI);
	}
}

클래스와는 달리 인터페이스의 모든 필드는  public static final이어야 하고 모든 메소드는 public abstract이어야 하지만 이 부분은 인터페이스 내에서 공통으로 적용되는 부분이라 생략해도 컴파일 시 자바 컴파일러가 자동으로 추가해주므로, 생략할 수 있다.

* static 메소드: 객체 생성 없이 클래스를 통해 메서드를 직접 호출할 수 있다.

* static 블록: ?

 


인터페이스의 구현

인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없다,

그렇기 때문에 인터페이스가 포함하고 있는 추상 메소드를 구현하는 클래스를 만들어야 한다.

class (클래스 이름) implements (인터페이스 이름) {...}

 


다형성을 구현하는 기술

1.  다형성

1 ) 정의

상속 관계에 있는 클래스에서 상위 클래스가 동일한 메세지로 하위 클래스들을 다르게 동작시키는 객체 지향 원리

부모 클래스가 자식 클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해 자식 클래스에 접근 가능

동적바인딩: 메서드 실행 시점에서 성격이 결정되는 바인딩

동적 바인딩을 통해 부모 클래스가 자식 클래스의 멤버 함수에 접근하여 실행할 수 있다.

아하 클래스에서 생성자를 두 개 하는 것도 다형성

2) 장점

  • 여러 객체를 하나의 타입으로 관리할 수 있기 때문에 유지보수가 쉽다.
  • 코드 재사용성이 높아진다.
  • 클래스간 의존성과 결합도는 줄어들고 확장성은 높아져 안정성이 높아진다.

3) 필수 조건

  • 상속관계: 부모 - 자식간 클래스 상속이 있어야 한다.
  • 오버라이딩: 다형성이 보장되기 위해서, 하위 클래스 메소드가 반드시 재정의 되어있어야 한다.
  • 업캐스팅: 부모 타입으로 자식클래스를 업캐스팅해서 객체를 생성하여야 한다.

* 업캐스팅: 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것.

2. Casting

3. Promotion

 

4. Dynamic Dispatch 

'개발일지 > 일간회고 (TIL)' 카테고리의 다른 글

왜 안되는걸까  (0) 2022.12.06
Java 테스트 코드  (0) 2022.12.04
Java 코드가 실행되는 과정  (0) 2022.11.30
발표도 끝! / TIL (22-09-14)  (0) 2022.11.29
프로젝트 끝 / TIL (22-11-28)  (0) 2022.11.28