추상화

김예인·2023년 5월 1일

백엔드 공부일지

목록 보기
13/43
post-thumbnail

추상화(Abstraction)

기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것


📚 추상클래스

abstract 제어자 : '미완성'

  • 추상 클래스(abstract class)
  • 추상 메서드(abstract method) : 메서드 시그니처만 존재, 바디가 없음

추상 메서드가 최소 하나 이상 포함돼 있는 경우 자동으로 추상 클래스!


추상클래스란?

  • 객체의 공통 속성과 기능을 추출하여 일단 미완성으로 정의한 클래스
  • 미완성 구조이기에 이를 기반으로 객체 생성 불가
  • 상속받는 하위 클래스에서 오버라이딩을 통해 각각 상황에 맞는 구체적인 메서드 내용 결정
  • 상속계층도의 상층부에 위치할수록 추상화 정도가 높고, 하층부일수록 구체화!

💻 예제

// Animal 추상 클래스
abstract class Animal {
    public abstract void sound(); // sound 추상 메서드
}
class Dog extends Animal { // Animal을 상속받은 Dog 클래스
	public void sound() {
    System.out.println("멍멍");
}

class Cat extends Animal { //Animal을 상속받은 Cat 클래스
	public void sound() {
    System.out.println("야옹");
}
class Test { // dog 인스턴스와 cat 인스턴스 생성 후, sound() 메서드를 호출

	public static void main(String[] args) throws Exception {
       Animal dog = new Dog();
       dog.sound(); // 멍멍

       Cat cat = new Cat();
       cat.sound(); // 야옹
    }
 }

📚 인터페이스 (interface)

❗ final 키워드 : "이게 최종이야!"

final 제어자가 추가되면, 해당 대상은 더 이상 변경이 불가하거나 확장되지 않는 성질 갖는다

final class : 변경 또는 확장 불가능한 클래스, 상속불가
final method() : 오버라이딩이 불가한 메서드
final 변수 : 값 변경이 불가한 상수

인터페이스란?

추상 메서드와 상수만을 멤버로 가질 수 있는 “추상 메서드의 집합"

| 기본구조

  • class 키워드 대신 interface 키워드를 사용
  • 내부의 모든 필드가 public static final 로 정의 (생략가능)
  • staticdefault 메서드 이외의 모든 메서드가 public abstract 로 정의 (생략가능)

| 구현

  • 인스턴스를 생성 불가
  • 메서드 바디를 정의하는 클래스 따로 작성 필수
  • 인터페이스 구현 클래스 생성 시 implements 키워드를 사용
  • 해당 클래스는 인터페이스에 정의된 모든 추상메서드를 필수 구현
class 클래스명 implements 인터페이스명 {
		... // 인터페이스에 정의된 모든 추상메서드 구현
}

| 다중 구현

  • 하나의 클래스에 다중 상속은 불가, 인터페이스 다중 구현은 가능
  • 하나의 클래스는 상속을 받으면서 동시에 인터페이스를 구현 가능
class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3 { 
				... 생략 ...
}
profile
백엔드 개발자 김예인입니다.

0개의 댓글