1. 추상 이해하기
자바에선 추상 클래스, 추상 메소드가 있다.
그런데 클래스에 추상(Abstract Class)이 왜 붙었을까?
추상에 대해 이해하기 위해 이런 저런 곳을 찾아보다가 아래의 사이트가 설명을 정말 잘 해두어서 도움을 많이 받았다.
추상에 대해 이해하기 위해선 아래의 사이트에 들어가서 내용을 살펴보는 것으로 충분할 것 같다.
https://limkydev.tistory.com/188
위의 내용을 바탕으로 내 입말로 정리를 해보려 한다.
나는 실체가 없다는 뜻으로 추상을 많이 사용한다.
만약 A클래스, B클래스, C클래스를 만들었다고 생각해보자.
이 각각의 클래스 안에는 필드(멤버 변수)와 메서드가 들어있을 것이다.
여기서 추상 클래스는 A,B,C 클래스들 간의 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스다.
조금 더 알기 쉽게, 각자의 얼굴을 클래스라고 생각해보자.
각기 얼굴은 뜯어 보면 뜯어볼수록 다 다르지만 공통점이 있다.
귀 2개, 코 1개, 눈 2개, 입 1개...
이렇게 공통적인 변수들을 한번에 관리하기 위해 만들어진 클래스가 바로 추상 클래스이다.
그 다음으로 모두가 함께 웃고 있다.
웃음의 모습은 서로 다를지라도 웃는다는 액션을 똑같이 취하고 있다.
(굳이 프로그래밍화 해서 표현하자면 laugh() 정도로 표현하면 되려나)
이것은 각기 다른 클래스 안에서 공통적인 메서드가 존재한다는 뜻이다.
이렇게 공통적인 메서드를 한번에 관리하기 위해 만들어진 메서드가 추상 메서드이다.
이러한 추상 클래스, 추상 메서드는 실체 클래스와 실체 메서드의 공통적인 부분을 추출해내는 것이 주 목적이다.
그래서 추상 클래스는 객체를 생성할 수가 없다.
왜!?
실체가 없기에, 즉 실체 클래스들의 공통적인 부분들을 모아놓기만 한 것이기 때문이다.
여기까지 이해했다면, 이어질 말도 이해될 것이다.
추상 클래스와 실체 클래스는 결국 상속 관계 안에 있다.
2. 추상(Abstract) 이해하기
그러면 대체 왜 추상의 개념이 사용되는 것일까?
크게 3가지 목적을 가지고 추상 클래스를 사용한다.
1) 공통된 필드와 메서드를 통일하기 위한 목적
예를 들어 우리가 프로젝트 팀으로 A라는 키보드를 만들고 있다.
ESC 버튼 하나를 구현하기 위해 각기 다른 팀원들이 각자 다른 메서드명과 각자 다른 변수명으로 코드를 짰다고 해보자.
이것을 구현하기 위해 일단 이 코드들을 때려넣고 A라는 클래스 객체를 선언하고 넣었다.
그런데 B라는 키보드로 프로젝트가 변경되었단다.
그러면 사람들은 B라는 클래스를 새로 만들어서 다시 코드를 짜고 집어넣어야할까?
그래서 추상 클래스를 만드는 것이다.
이렇게 되면 B키보드를 만들 때 키보드 추상 클래스에서 필요한 필드와 메서드를 가지고 와서 작업을 하게 된다.
이렇게 하면 유지 보수성도 높아지고 코드의 통일성을 유지할 수 있다.
2) 실체 클래스를 구현할 때 시간을 절약하기 위해
키보드면 단순해서 그나마 낫다.
만약 입사를 했는데 자동차 라는 거대한 클래스를 일주일 안에 구현하라고 한다.
그럼 설계부터.. 머리가 터질 것이다.
이 때 누군가가 설계해준 추상 클래스를 사용할 수 있다면 어떻게 될까?
추상 클래스를 입맛대로 사용할 수 있는 것이다.
그렇다면 이 추상 클래스도 결국 내가 만들어야 하는 거 아니냐고?
이런 일만 전문적으로 하는 AA(어플리케이션 아키텍쳐)라는 직업이 있다.
그렇기에 개발자들은 우선 추상 클래스를 이해하고 이를 상속받아 멋지게 구현하는 방법을 아는 것에 집중하면 된다.
3) 규격에 맞는 실체 클래스를 구현할 수 있다
실체 클래스를 구현할 때 시간을 절약할 수 있다는 장점과 더불어 규격에 맞는 구현도 가능하다는 장점이 있다.
개발은 결코 혼자서 하는 일이 아니다.
모두가 약속한 필드와 메서드 그리고 설계 규칙에 녹아져있는 규격에 맞는 클래스를 구현해야한다.
그렇기에 추상클래스의 강력한 기능이 여기서 나오는 것이다.
추상 클래스를 상속받은 실체 클래스들은 반드시 추상 메서드를 재정의(Overriding)해서 실행 내용을 작성해야한다.
추상 메서드는 위에서 설명했듯 추상 클래스 안에 abstract 키워드를 갖고 있는 메서드이며 상속시 반드시 재정의를 해야한다.
3. 추상 클래스와 추상 메서드의 문법
문법은 간단하다.
클래스나 메서드 앞에 abstract를 붙이기만 하면 된다.
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #8-5 익명 내부 객체(Anonymous class) (0) | 2022.09.15 |
---|---|
[JAVA] #8-4 인터페이스(Interface) (0) | 2022.09.15 |
[JAVA] #8-2 다형성(Polymorphism) (0) | 2022.09.15 |
[JAVA] #8-1 Super (0) | 2022.09.15 |
[JAVA] #7-3 Object와 toString() (0) | 2022.09.14 |