추상화와 추상화 클래스

gurdl7011·2022년 9월 23일
0

추상화란?

컴퓨터 과학

  • 추상화는 복잡한 자료, 모듈, 시스템 등으로부터
    핵심적인 개념 또는 기능을 간추려 내는 것을 말한다

객체 지향 관점

  • 클래스를 정의할 때, 불필요한 부분들을 생략하고
    클래스들의 중요하고 공통된 성질들을 추출하여
    슈퍼 클래스를 선정하는 개념

조금 간략히 설명하자면
추상화란 클래스의 고정된 부분만 추출하는 것을 야기한다

이런 부분들을 따로 추출하는 것을 추상화라 부른다

추상화 클래스

클래스를 설계도에 비유한다면 
추상 클래스는 미완성 설계도에 비유할 수 있습니다.

추상 클래스는 키워드 abstract를 붙이기만 하면 됩니다.

추상 클래스는 추상 메소드를 0개 이상 가지고 있다는 것을 제외하고는
일반 클래스와 전혀 다르지 않습니다.

public abstract class Animal {}

추상 메소드는 간단하게 말하면 선언부는 있는데 구현부가 없는 메소드를 의미합니다

public abstract class Animal{
	void sounds();
}
public class Animal {
    abstract void sounds();
}

이렇게 추상 클래스는 일반 클래스와 크게 다르지 않습니다.

  • 다만 어떤 공통된 클래스들에 대해서 추상화된 부분을 
    추상 메소드를 통해서 하위 클래스들에게 상속을 통해서
    사용할 수 있도록 합니다

  • 또한 전혀 다른 클래스들에게 사용한다기 보단 비슷한 특징을 가지고 있는
    클래스들에게 사용한다는 특징도 가지고 있습니다

    • 추상 클래스는 인스턴스, 즉 객체를 만들 수 없는 클래스 입니다.
    • 추상 메소드는 하위 클래스에서 메소드의 구현을 강제해야 합니다.
    • 추상 메소드를 포함하는 클래스는 반드시 추상 클래스여야 합니다.
    • 상속하는 집합간에는 연간관계가 있습니다.
    • 다중 상속이 불가능합니다.

추상화 클래스를 사용하는 이유는 다음과 같다

  • 코드가 간결해지기 때문에 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축
  • 잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가

먼저 소리를 낸다(운다)라는
특징을 동물로 묶어서 추상화 했다고 가정해보자

public class Animal{
	abstract void sounds();
}

이 때 강아지와 고양이는 ‘운다’라는 점은 같지만
울음소리는 ‘멍멍’, ‘야옹’으로 나뉜다

public class Dog extends Animal{
	void sounds() {
		System.out.println("멍멍");
	}
}
public class Cat extends Animal{
	void sounds() {
		System.out.println("야옹");
	}
}

만약 여기서 쥐가 추가된다면?
여기서 추상화 클래스를 사용하는 이유가 나온다.

  • 쥐 또한 동물에 속하며 울음소리를 내기 때문에
public class Mouse extends Animal{
	void sounds() {
		System.out.println("찍찍");
	}
}

미리 만들었던 추상화 클래스를 사용하면
코드를 짤 때 고정된 부분을 이용할 수 있다.


Plus

이는 객체 지향 5원칙중
Open-Closed Principle(개방 폐쇄의 원칙)에 의해

💡 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀 있어야 한다는 규칙이 있는데 이는 추상화 클래스의 특징과도 일맥상통(一脈相通)한다

0개의 댓글