본문 바로가기
Java

백엔드_객체지향__추상화 / 추상 클래스

by N잡러 지망생 2023. 7. 18.
728x90

추상화란?

피카소 황소 추상화

위 그림은 피카소가 황소를 추상화 한 것이다.

 

과거 런던의 지하철 노선도
현대의 런던 지하철 노선도

황소의 그림과 두 지하철 노선도 사진을 보면 

추상화라는 게 대충 어떤 느낌인지 알 수 있다.

한마디로 불필요한 거 제거하고 특징만 살리는 것.

 

우리가 핸드폰으로 보는 지도, 표지판등도 추상화를 한 것이다.

예를 들어서

화장실

화장실을 나타내는 이 그림들을 추상화를 시키지 않았다고 해보자

그러면 불필요한 요소들이 많이 들어갈 것이다.

눈 코 입 머리카락 손가락 발가락 움직이는 모습

입고 있는 옷

그러면 그림 하나 그리는데 시간과 비용이 훨씬 많이 들 것이다.

 

그동안 해왔던 프로그램 실습도 사실 모두 추상화가 되어있던 것이다.

객체지향에서 클래스를 만들 때 새의 특징들만 뽑아온 것도 추상화고

손님과 점원의 관계에서도 불필요한 행동을 빼고 우리가 필요한 것만 갖고 온 것도 마찬가지다.

 

추상클래스

추상클래스는 실재하지 않지만 하위의 공통적인 속성, 행위를 기준으로 정의한 개념.

 

 

 

추상 클래스 선언 방법

간단하다

public class Animal {}이 있으면 class앞에  abstract를 넣어주면 된다.

추상 클래스는 실재하지 않기에 인스턴스화를 할 수 없다.(new 뭐를 할 수 없다.)

 

추상 메서드 선언 방법

 

public void sleep(){} 있으면 마찬가지 리턴값(여기서는 void) 앞에  abstract를 넣어주면 된다.

추상 클래스일 때 선언을 할 수 있다.

추상 클래스를 선언한 클래스를 상속한다면

@Override를 해야 한다.   의무임

 

필드는 안 한다.

 

abstract

abstract를 적용하면 메서드 부분을 저런 식으로 바꿔줘야 한다.

 

이번에 Dog클래스를 추가하는데

추상화가 걸려있는 부모 클래스를 상속하려고 하면 저런 식으로 빨간 줄이 뜨게 된다.

@Override 추가

위에서 말한 대로 @Override를 통해서 메서드를 만들어 준다.

 

뭐... 그래서.... 추상화를 왜 하는 건데?

 

나중에 클래스가 많아지면 

어떤 게 인스턴스화 해서 로직에 참여 객체이고

어떤게 보조해서 상위 개념에 있는 객체냐를 구분하는 거라는데........

라이브러리나 디자인 패턴에서 많이 사용된다도 한다.

 

결국 구분하기 편하게 하기 위해서?????

반응형