230329 - java(12)

팝콘·2023년 3월 29일

Java

목록 보기
11/17

1. 추상화

  • 메소드를 무조건 재정의하게 만든다.
  • 추상화의 목적은 사용방법이 동일한 메소드를 만들기 위해서다.

추상 클래스(Abstract Class)

  • 미완성 설계도이며 인스턴스를 생성할 수 없다.
  • 미완성 메서드(추상 메서드)를 포함하고 있는 클래스다.
  • 생성자와 일반 구현메소드도 보유할 수 있다.
  • abstract 키워드를 사용해서 정의할 수 있다.
  • 보편적으로 인터페이스와 구현클래스의 중간역할을 한다. 중간 구현을 담당함으로써 구현클래스의 구현부담을 감소해준다.
  • 추상 클래스는 new 키워드를 사용해 객체를 생성할 수 없다.

추상 메소드 (Abstract Method)

  • 메소드의 구현부가 없는 메소드다.

  • abstract 키워드를 사용해서 정의할 수 있다.

  • 추상클래스와 인터페이스만 추상메소드를 보유할 수 있다.

  • 추상 메서드의 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고 실제 내용은 상속받는 클래스에서 구현하도록 비워 두는 것이다.

	public abstract class Printer {
		public abstract void print();	// 추상메소드
	}
  • 구현 클래스
    - 추상 클래스를 상속받은 클래스다. 오버라이딩을 통해 조상인 추상클래스의 추상메서드를 모두 구현해야한다.
    - new 키워드를 사용해서 객체생성할 수 있다.

  • 구현 메소드
    - 추상 메서드를 재정의한 메서드다.
    - 메소드의 구현부가 있는 메소드다. (구현부가 있고, 수행문이 하나도 없어도 구현 메소드다.)


2. 인테페이스

  • 일종의 추상클래스다. 추상클래스보다 추상화 정도가 높아서 오직 추상메서드와 상수만을 멤버로 가질 수 있다. 다른 요소는 허용하지 않는다.
  • 인터페이스에는 구현 클래스가 구현할 기능에 대한 명세(규격에 대한 정의)가 정의되어 있다.
  • 추상클래스가 부분적으로만 완성된 '미완성 설계도'라면, 인터페이스는 밑그림만 그려져 있는 '기본 설계도'다.
  • 접근제어자로 public, default만 사용할 수 있다.
	interface 인터페이스이름 {
		public static final 타입 상수이름 = 값;
    	public abstract 메서드이름(매개변수목록);
	}
  • 인터페이스는 다중상속이 가능하다.
  • implements 키워드를 사용한다.
	class 클래스이름 implements 인터페이스이름 {
    	// 인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
    }
  • 구현하는 인터페이스의 메서드 중 일부만 구현한다면 abstract를 붙여서 추상클래스로 선언해야 한다.
  • 인터페이스의 메소드를 너무 한 곳에 몰아서 정의하면 구현 클래스가 구현하지 못할 상황이 올 수도 있기 때문에 인터페이스는 가급적 분리하는 것이 좋다.
  • 다양한 조합과 확장성을 위해 인테페이스는 분리되어야 한다.
  • 인터페이스를 통해 구현클래스의 기능을 짐작할 수 있다.

디폴트 메서드

  • 인터페이스에 추상 메서드를 추가해야할 때 default 키워드를 붙이면 구현클래스를 변경하지 않아도 된다.

새로 추가된 디폴트 메서드가 기존의 메서드와 이름이 중복되어 충돌하는 경우 해결하는 방법은 다음과 같다.

  1. 여러 인터페이스의 디폴드 메서드 간의 충돌
    • 인터페이스를 구현한 클래스에서 디폴드 메서드를 오버라이딩해야 한다.
  2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌
    • 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

인터페이스 멤버 제약사항

  • 모든 멤버변수는 public static final이어야 하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract이어야 하며, 이를 생략할 수 있다.
    (Java 8부터 deflut메소드, static 메소드도 가능해졌다.)

인터페이스를 이용한 다형성

  • 인터페이스는 이를 구현한 클래스의 조상이라 할 수 있다.
  • 리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.

인터페이스의 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계없는 클래스들에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.
  • 인터페이스를 이용하면 클래스의 선언과 구현을 분리시킬 수 있기 때문에 독립적인 프로그래밍이 가능하다.

마크업 인터페이스

  • 추상메소드가 하나도 없는 인터페이스
  • 네트워크로 주고받을 수 있는 인터페이스라고 표시하는 목적의 인터페이스다.
profile
터짐

0개의 댓글