티스토리 뷰

language/java

추상 클래스란?

daeuun 2021. 7. 22. 03:21

 

추상클래스-실체클래스를 외우려니까 이름처럼 너무 추상적이어서 ^^ 이해하기 어려웠는데

그림처럼 흐름을 그리면서 생각하니까 이해가 아주 쏙쏙 되었다.

같이 흐름대로 이해해보아요! 

 

1. 추상클래스는 무엇일까? 💇🏻‍♀️

 

클래스.... 항상 만드는게 클래스라서 단어는 아주 익숙하다.

일단 클래스는 일반 클래스와 추상 클래스로 나뉜다.

 

 

추상클래스는 A클래스, B클래스, C클래스, ..... 수많은 클래스들 중 "비슷한 필드와 메서드를 공통적으로 추출해" 만들어진 클래스다.

클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말한다.

 

 

 

처음부터 이론적으로 접근하니까 너무 어렵다.

쉽게 설명하자면!

 

 

게임을 시작하기전 캐릭터를 커스터마이징을 하는 페이지

게임을 처음 시작하면 게임 캐릭터를 먼저 만들면서 시작하게 된다. 보통 게임에서 캐릭터는 사람의 형태부터 시작해서 이것저것 선택할 수 있게 돼있다.

그 때 기본적인 외형, 그러니까 눈코입 헤어 피부 몸통 ⬅ 이런 기본 요소는 존재하는 상태에서 유저는 꾸미기를 할 수 있다.

내 취향에 따라 파란눈, 하얀헤어, 분홍색 볼터치.... 등등 마음대로 꾸미는 요소를 지정할 수 있는 것이다.

 

여기서 완성된 각자의 게임 캐릭터를 보면 공통점이 무엇일까? 바로 사람이라는 것이다!

(클래스에 접목시키면) 공통적인 변수를 가지고 있는 것이다.

그러므로 게임에서 기본적으로 제공하는 기본 캐릭터가 추상클래스 안으로 들어가게 된다.

 

 

 

자 이제 완성된 게임 캐릭터가 게임을 하면서 활동을 하게 된다.

보통 게임하면서 친구랑 채팅도 하고 잡담도 떠드는데 기분에 따라서 캐릭터 얼굴에 표정을 넣을 수가 있다.

근데 같은 단축키를 눌러서 웃음을 지어도 어떤 얼굴을 하고있는지에 따라서 웃는 모습이 다르다..!

요렇게 빵긋😊 웃기도하고 😉윙크 하기도 하고 😃해맑게 웃기도 한다. 같은 웃음을 짓고있지만 웃는 모습이 다르다.

그래도 어쨌든 누가봐도 모두 웃고있다고 생각하겠지?

이는 공통된 메서드를 가지고 있는 것이다. 이 공통된 메서드 웃는 모습도 추상클래스 안으로 들어가게 된다!

 

 

 

이런 예시로 보면

실체 클래스는 실체가 드러나는 클래스이고 추상클래스는 실체 클래스의 공통적인 부분을 추출해 어느정도 규격을 잡아놓은 추상적인 클래스이다. 그래서 추상클래스는 아직 메서드와 내용이 추상적이기 때문에 객체를 생성할 수 없게 만들었다!

 

 

👍🏻정리

1. 추상클래스는 실체클래스의 공통적인 부분(변수,메서드)를 추출해서 선언한 클래스

2. 추상클래스는 객체를 생성할 수 없다! 아직은 실체성이 없고 구체적이지 않기 때문에!

3. 추상클래스와 실체클래스는 상속관계!

 

 

 

 

 

 

 

2. 추상 클래스를 사용하는 목적은 무엇일까?? 왜 사용하는거지?

 

 

일반 클래스들의 필드와 메소드를 통일하여 일반 클래스 작성 시 시간을 절약할 수 있다.

 

 

여러명의 개발자가 각자 실체 클래스를 구현하는데 공통된 필드와 메소드가 없으면 각자의 취향껏 만들게 될 것이다.

이러면 나중에 수정이 필요할 때 유지보수하기 어렵고 시간도 오~~래 걸릴 것이다.

 

거기다 공통된 필드와 메서드가 없다면 애초에 개발자는 망망대해를 떠도는 기분으로 처음부터 끝까지 모두 만들어야할 것이다.

앞서 예로 들었던 게임 캐릭터로 생각하면 각자 캐릭터를 하나씩 만드는데 사람 모양, 로봇 모양, 쿠키 모양 등등 제각기 통일성 없는 캐릭터가 만들어질 수도 있는 것이다! 만약 공통된 필드와 메서드가 있으면 그냥 가져오기만 해서 꾸미기만 하면 되는데 말이지

 

 

 

 

 

3. 추상 클래스 작성법

 

public abstract class 클래스명{

 

}

 

class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야한다는 것을 알려주면 된다!

 

 

추상메서드도 메서드 리턴타입 앞에 "abstract" 를 붙이면 된다.

[ public | protected ] abstract 리턴타입 메소드명(매개변수1, 매개변수2, ... );

 

 

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함