추상(Abstract)

웃음인·2025년 4월 15일

Java

목록 보기
20/37
post-thumbnail

추상 클래스(abstract class)

몸체 없는 메소드를 포함한 클래스 (미완성 설계도)
추상 클래스일 경우 클래스 선언부에 abstract 키워드 사용

[접근제한자] abstract class 클래스명 {}

✔️ 특징

  1. 미완성 클래스(abstract 키워드 사용)
    자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성

  2. abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
    abstract 메소드가 없어도 abstract 클래스 선언 가능

  3. 클래스 내에 일반 변수, 메소드 포함 가능

  4. 객체 생성은 안 되지만 참조형 변수 타입으로는 사용 가능 (다형성 적용 가능)
    추상클래스 변수명 = new 자식();


✔️ 장점

상속 받은 자식에게 공통된 멤버 제공
일부 기능의 구현을 강제화 (공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능)



추상 메소드(abstract method)

몸체 없는 메소드
추상 메소드의 선언부에 abstract 키워드 사용
상속 시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드

[접근제한자] abstract 반환형 메소드명(자료형 변수명);

인터페이스(Interface)

상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것으로
상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함

[접근제한자] interface 인터페이스명 {
	// 상수도 멤버로 포함할 수 있음
	public static final 자료형 변수명 = 초기값;

	//추상 메소드만 선언 가능
	[public abstract] 반환자료형 메소드명([자료형 매개변수]);
	// public abstract가 생략되기 때문에
	// 오버라이딩 시 반드시 public 표기해야 함
}

✔️ 특징

  1. 모든 인터페이스의 메소드는 묵시적으로 public abstract

  2. 변수는 묵시적으로 public static final

  3. 객체 생성은 안 되나 참조형 변수로는 가능(다형성)


✔️ 장점

다형성을 이용하여 상위 타입 역할 (자식 객체 연결)
인터페이스 구현 객체에 공통된 기능 구현 강제화 ( == 구현 객체간의 일관성 제공)
공동 작업을 위한 인터페이스 제공



추상클래스와 인터페이스






[ 정리 ]

상속

(자식클래스의) 공통된 부분을 추출하여 부모클래스를 만드는 것
→ 공통된 필드, 메서드를 가진 클래스를 만들고, 작성된 코드를 자식들이 물려받아 사용.
→ 코드길이 감소, 코드 중복 제거, 재사용성 증가, 자식에 대한 일관된 규칙 제공

  • [일반 클래스] 상속
    부모 클래스도 객체로 만들수 있어야 하는 경우

  • [추상 클래스] 상속
    연관된 클래스의 공통점을 묶되, 부모클래스는 객체로 만들 수 없는 경우
    + 일부 미완성 클래스(abstract 메소드 0개 이상 포함)
       ex) Animal 클래스 → 동물 객체는 어떤 동물인가?
                                   eat(), breath() 는 어떻게 수행되는가? → 알 수 없음
                                   하지만, 동물의 공통된 기능명은 알고 있음.


  • [인터페이스] 상속 : 접점
    연관성이 낮거나 없는 클래스에게 공통된 기능을 제공할 때 사용.
    ex) 키보드, 마우스, 스캐너, 카메라, 기울기 센서 (공통점 : 입력장치)
    우연히도 입력이라는 기능을 가지고 있음!
    → 각각의 용도는 다르지만 입력이라는 공통된 기능명이 있음. 입력이라는 접점!

    + 모든 필드가 묵시적(암묵적) public static final
    ex) public static final double PI = 3.141592;
         (public static final) double PI = 3.141592; (묵시적)

    + 모든 메서드가 묵시적으로 public abstract(추상메서드)
      ⇒ 같은 이름을 제공할 뿐이지, 상세한 기능 제공은 하지 않는다.
       ex) (public abstract) void input( )
          → input이라는 이름을 자식에게 제공할 뿐
             상세한 기능은 자식이 알아서 오버라이딩 해라!
             그런데 추상메서드니까 오버라이딩 강제화



🔗 추상클래스 / 인터페이스

0개의 댓글