반응형

 

 

추상이 도대체 뭔 소린지 모르겠는

코린이 && 자린이 &&  비전공자(== 나) 여러분께 바칩니다..

(지적은 언제나 대환영입니다.)

 

 

 

 

 

본 아티클 시리즈를 정독하면, 아래 의문에 답을 얻을 수 있습니다.

 

1. 인터페이스와 구현체가 무엇인가?  (List와 ArrayList의 차이) (클릭🔗)

2. ArrayList가 아닌 List 타입으로 선언하는 이유 (업캐스팅) (클릭🔗)

3. Set - HashSet, Map - HashMap 의 차이 (클릭🔗)

4. 추상클래스란? -> 본편

 

 

 

 


 

추상이란?

 

위키백과에서는 '추상화'를 아래와 같이 설명합니다.

 

"컴퓨터 과학에서 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다."

 

이게 바로 이해가 되시나요?

 

뭔가 간추린다는 느낌은 알겠는데,

우리 일상에서 사용하던 추상이라는 단어의 뜻과는 많은 괴리감이 느껴집니다.

 

적어도 저는 그랬습니다.

 

 

이런게 추상화 아닌가요..?

(물론 이 '화'는 그림이고, 그 '화'는 속성의 변화를 의미하기에 다릅니다만.. 발음과 글자가 주는 느낌이라는 것이 있단 말입니다..)

 

 

프로그래밍을 공부하며 많은 부분에서 '추상'이라는 표현을 접했습니다.

객체지향의 추상화, 자바의 추상 클래스, 추상 메서드..

 

그렇게 공부하다가 자연스럽게 '추상'의 뜻을 이해하게 되었고,

위에 적힌 정의를 읽어봐도 어느정도 감이 잡히더라고요.

 

 

저는 '추상'이라는 뜻에 대해

1. 간단하게 설계 또는 간단하게 보여지는

2. '구체적'의 반대

두 가지 해석을 적용하고 싶습니다.

 

 

추상화라는 개념이 매우 중요하지만,

그만큼 넓고 추상적인 개념인 것 같습니다.(닉값 제대로)

따라서 위의 두 가지 해석으로는 많이 부족할 수도 있습니다.

 

하지만 저처럼 도통 이해가 안 돼서 넘어가는 것보다는 낫다고 생각합니다.

이해가 안 되는 초기에는 쉽게 이해하다가, 이해가 쌓일수록 본질적인 뜻을 파악할 수 있으리라 생각합니다.

 

 

아무튼 이런 뜻 풀이를 가지고,

추상 클래스, 추상 메서드가 무엇인지 알아보겠습니다.

 

 

 

 

 

 

 

 

추상 클래스, 추상 메서드

 

추상 클래스는, 추상 메서드를 1개 이상 가지고 있는 클래스를 뜻합니다.

 

그러니 '추상 메서드'를 이해하는 것이 더 중요하겠네요.

추상 메서드의 뜻은 '자식 클래스에서 반드시 오버라이딩해야 하는 메서드'입니다.

 

 

반대 관점에서 보면?

부모 클래스에는 구현되지 않고 선언만 되어 있는 메서드입니다.

자식 클래스에서 오버라이딩을 통해 직접 구현해야만 사용할 수가 있는 것입니다.

 

추상 메서드는 구체적으로 구현이 되어 있지 않습니다.

간단하게 설계만 되어 있으며, 구현은 상속 받은 클래스에서 직접 해야 합니다.

 

 

 

 

 

 

 

인터페이스와 추상 클래스

 

인터페이스는 추상 클래스에 속합니다.

인터페이스의 모든 메서드는 추상 메서드여야하기 때문이죠. (default, static은 예외)

 

따라서 인터페이스는 모든 메서드가 '선언'만 되고 '구현'은 되지 않은 껍데기 입니다.

설계도, 가이드와 같죠.

 

인터페이스를 구현하는 구현 객체는, 인터페이스에서 선언된 모든 추상 메서드를 '구현'해야만 합니다.

 

인터페이스로 규격을 간단하게 설계하고, (비구체적, 추상)

구현 객체에서는 규격에 맞게 메서드를 구현합니다. (구체적)

 

 

 

자바의 ArrayListList의 관계로 설명을 더해보겠습니다.

 

둘의 관계는 아래와 같습니다.

List(인터페이스) ---(구현)---> AbstractList(추상 클래스) ---상속---> ArrayList(클래스)

 

실제로 정의된 코드를 살펴보며

List 인터페이스는 리스트가 갖춰야 할 규격을 간단하게 설계했습니다.

List를 구현한 코드의 일부 - 구현되지 않은 추상 메서드들이 간단하게 설계되어 있다.

 

AbstractList 추상 클래스에서는 그중 일부를 구체적으로 구현했고, 일부는 추상적으로 남겨둡니다.

AbstractList를 구현한 코드의 일부 - add는 구현되었고, get은 추상 메서드로 남아 있다.

 

ArrayList 클래스에서는 모든 추상 메서드를 구체적으로 구현하고, 일부 메서드는 오버라이딩합니다.

ArrayList를 구현한 코드의 일부 - 추상 메서드로 남아 있던 get을 구현했다.

 

 

이것이 추상 클래스, 추상 메서드가 실제로 활용되는 방식입니다.

 

 

 

 


 

 

본 아티클을 통해 추상 클래스, 추상 메서드에 대한 이해가 더해지길 바랍니다.

또, 저처럼 추상의 뜻이 도통 이해되지 않던 자린이, 코린이도 추상의 개념을 조금은 이해해가길 기원합니다.

 

잘못된 부분이 있다면 단호한 지적 부탁드립니다.

감사합니다!!

 

 

 

 

 

 

 

 

반응형

+ Recent posts