추상화란?
위 그림은 피카소가 황소를 추상화 한 것이다.
황소의 그림과 두 지하철 노선도 사진을 보면
추상화라는 게 대충 어떤 느낌인지 알 수 있다.
한마디로 불필요한 거 제거하고 특징만 살리는 것.
우리가 핸드폰으로 보는 지도, 표지판등도 추상화를 한 것이다.
예를 들어서
화장실을 나타내는 이 그림들을 추상화를 시키지 않았다고 해보자
그러면 불필요한 요소들이 많이 들어갈 것이다.
눈 코 입 머리카락 손가락 발가락 움직이는 모습
입고 있는 옷
그러면 그림 하나 그리는데 시간과 비용이 훨씬 많이 들 것이다.
그동안 해왔던 프로그램 실습도 사실 모두 추상화가 되어있던 것이다.
객체지향에서 클래스를 만들 때 새의 특징들만 뽑아온 것도 추상화고
손님과 점원의 관계에서도 불필요한 행동을 빼고 우리가 필요한 것만 갖고 온 것도 마찬가지다.
추상클래스
추상클래스는 실재하지 않지만 하위의 공통적인 속성, 행위를 기준으로 정의한 개념.
추상 클래스 선언 방법
간단하다
public class Animal {}이 있으면 class앞에 abstract를 넣어주면 된다.
추상 클래스는 실재하지 않기에 인스턴스화를 할 수 없다.(new 뭐를 할 수 없다.)
추상 메서드 선언 방법
public void sleep(){} 있으면 마찬가지 리턴값(여기서는 void) 앞에 abstract를 넣어주면 된다.
추상 클래스일 때 선언을 할 수 있다.
추상 클래스를 선언한 클래스를 상속한다면
@Override를 해야 한다. 의무임
필드는 안 한다.
abstract를 적용하면 메서드 부분을 저런 식으로 바꿔줘야 한다.
이번에 Dog클래스를 추가하는데
추상화가 걸려있는 부모 클래스를 상속하려고 하면 저런 식으로 빨간 줄이 뜨게 된다.
위에서 말한 대로 @Override를 통해서 메서드를 만들어 준다.
뭐... 그래서.... 추상화를 왜 하는 건데?
나중에 클래스가 많아지면
어떤 게 인스턴스화 해서 로직에 참여 객체이고
어떤게 보조해서 상위 개념에 있는 객체냐를 구분하는 거라는데........
라이브러리나 디자인 패턴에서 많이 사용된다도 한다.
결국 구분하기 편하게 하기 위해서?????
'Java' 카테고리의 다른 글
백엔드_객체지향__고객 관리 시스템 실습 (2) | 2023.07.18 |
---|---|
백엔드_자바__다형성(업 캐스팅) 간단한 실습 (4) | 2023.07.17 |
백엔드_자바__객체의 상속 (15) | 2023.07.17 |
자바_객체지향__커피 주문 상황 (8) | 2023.07.16 |
백엔드_자바__ro쩌는 인스턴스 비유 / 오버로드 (37) | 2023.07.14 |