추상화 (Abstraction)

Mixer·2022년 5월 13일
0
post-thumbnail

추상화

객체지향 프로그래밍의 네번째 개념으로 "추상"이라는 용어의 사전적 의미는 "사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것" 이라 정의한다.

여태 상속이 하위 클래스를 정의하는데 상위 클래스를 사용한 것이라 하면, 추상화는 반대라 생각하면 된다
기존 클래스들의 공통적인 요소들을 추출해 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화(사전 : 대강 추리는 일) 하는 것,상위 클래스를 만들어 내는 것이라 한다.

추상화 예제)

class WorkA, WorkB는 각각 name 속성과 setName(),getName() 메소드가 중복이 되고있다.

사용을 해도 문제는 없지만 비효율적이다.
개선을 해보면 이렇게 할수있다.

abstract 제어자

추상화에 대한 핵심 개념 중 첫 번째로 챙길 abstract 제어자 이다.

abstract 제어자란?
사전적 의미론 '추상적인'이라는 뜻을 가지고 있는데, 자바의 맥락에선 abstract라는 단어가 가지고 있는 의미는 '미완성' 이라 말할 수 있다.

abstract는 주로 클래스와 메서드를 형용하는 키워드로 사용된다.

추상 메서드 (abstract method)

추상메서드란?
하위 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드이다.
자바에서 추상 메서드를 선언하여 사용하는 목적은 추상 메서드가 포함된 클래스를 상속받는 하위 클래스가 반드시 추상 메서드를 구현하도록 하기 위함이다.

abstract 반환타입 메서드이름();

추상 클래스 (abstract class)

하나 이상의 추상 메소드를 포함하는 클래스를 가르쳐 추상 클래스라고 한다.
이런 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있게한다.
즉, 반드시 사용되어야 하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에선 이 추상 메서드를 반드시 재정의 해야한다.

abstract class 클래스이름{
	...
	abstract 반환타입 메소드이름();
    ...
}

이런 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스 생성이 불가하다.
추상 클래스는 먼저 상속을 통해 하위 클래스를 만들고, 만들어진 하위 클래스에서 추상 클래스의 모든 추상 메소드를 오버라이딩 작업을 해야 비로소 하위 클래스의 인스턴스를 생성할 수 있다.

⚑ 추상 클래스는 추상 메소드를 포함한 점을 제외하면, 일반 클래스와 모든 점이 같다.
즉, 생성자, 필드, 일반 메소드도 포함할 수 있다.

왜 추상화를 하는걸까?

추상화를 통해 잘 설계가 되었다면 여러개의 클래스를 정의했을 때, 중복 코드가 현저히 줄어든다.

  • 코드가 간결해지기 때문에 생산성 증가, 가독성 증가, 에러 감소, 유지 보수시 시간 단축 등의 효과가 있다.
  • 잘 만들어진 슈퍼 클래스 덕분에 코드의 재사용성이 증가한다.
  • 협업 시 공통된 속성과 기능임에도 불구하고 각각 다른 변수 메소드로 정의되는 경우 발생할 오류를 미연에 방지

상속계층도의 상층부에 위치 할수록 추상화의 정도가 높고 내려갈수록 구체화 된다고 정리하면 도움이 될것같다.
하지만 반대론 상층부에 가까울수록 더 공통적인 속성과 기능들이 정의되어 있다 생각할수도 있다

profile
Minthug'life

0개의 댓글