╱╱╭╮╱╱╱╱╱╱╭━━━╮╱╱╱╭╮╱╭╮╱╱╱╱╱╱ ╱╱┃┃╱╱╱╱╱╱┃╭━╮┃╱╱╱┃┃╱┃┃╱╱╱╱╱╱ ╱╱┃┣━━┳━━╮┃┃╱┃┣━╮╱┃╰━╯┣━━┳━╮╱ ╭╮┃┃╭╮┃┃━┫┃╰━╯┃╭╮╮┃╭━╮┃╭╮┃╭╮╮ ┃╰╯┃╭╮┃┃━┫┃╭━╮┃┃┃┃┃┃╱┃┃╭╮┃┃┃┃ ╰━━┻╯╰┻━━╯╰╯╱╰┻╯╰╯╰╯╱╰┻╯╰┻╯╰╯

Java/Java 기초

[Java] 객체지향 언어 특징 (추상화 Abstraction)

재안안 2022. 4. 13. 00:36

클래스를 이해하는데 있어서 알아야하는 중요한 개념이 있다.

객체지향 언어의 특징이다.

객체지향 언어의 특징은 아래와 같다.

 

  • 추상화
  • 상속성
  • 다형성
  • 캡슐화

 

위의 모든 개념들은 클래스와 접목시킬 수 있다.

 

  • 추상화(Abstraction)

위의 특징들중 우선 추상화(Abstraction)를 먼저 알아보겠다.

 

추상화는 여러가지 데이터중 공통된 속성이나 특징만 남기고 차이점을 버리는것을 뜻한다.
본질적인 목적은 데이터의 핵심적인 개념 또는 기능을 간추려내기 위함이다.

 

그런데 클래스에서 쉽게 말하자면 여러가지 데이터 모두에 속하는 교집합을 찾는 것이다.

 

추상화를 하는 목적, 교집합을 만드는 목적는 결국 코드의 재활용에 있다.

왜냐하면 공통된 속성과 특징은 결국 반복되니까.

 

아래의 예제를 통해 설명하겠다.

 

표현하고 싶은 동물로 늑대, 호랑이, 곰이 있다.

위의 사진엔 늑대의 특성, 호랑이의 특성, 곰의 특성이 있다.

 

이처럼 공통된 속성이나 특징만 남기고 차이점을 버리는면,

늑대, 호랑이, 곰을 추상화하면 '포식자'라는 특징만이 남는다.

 

늑대, 호랑이, 곰의 공통적인 핵심 개념은 '포식자'이다. 

 

무엇이 공통적이라는 것은 결국 반복된다는 것이다.

 

이는 아래의 예제를 통해 설명하겠다.

 

늑대, 호랑이, 곰을 클래스로 표현 하였다.

클래스로 표현하는 이유는 각각이 가지고 있는 특징들을 모두 데이터로 저장하고 싶어서이다.

 

해당 코드를 보면 위의 교집합 '포식자'가 반복된다.

공통된 특징이니 반복될 수 밖에 없다.

 

그런데 만약 이런 방식으로 표현한다면

표현하고자 하는 동물이 더 생기는 만큼 클래스를 더 만들어줘야한다.

 

그러면 결과적으로 우리는 수많은 클래스명을 외우고 있어야한다.

그리고 각 객체마다 이 동물은 포식자임을 명시해야한다.

 

매우 불필요한 작업이다.

 

이때 추상화를 사용하여 간편하게 표현할 수 있다.

 

추상화는 여러가지 객체에서 공통된 속성이나 특징을 도출하는 것이다.

 

'포식자'는 늑대, 곰, 호랑이를 모두 포함하나 각 개체를 완전히 설명할 순 없다.

 

왜냐하면 늑대, 곰, 호랑이는 실체가 있지만 포식자는 실체가 없기 때문이다.

개구리도 포식자고 잠자리도 포식자다. 그런데 포식자를 떠올리면 개구리나 잠자리는 잘 떠오르지 않는다.

때문에 포식자는 실체가 없다.

 

객체 지향적으로 말하자면

각 객체(데이터)들은 실체가 있지만, 객체들을 추상화한 클래스는 실체가 없다.

 

포식자는 아래와 같이 표현할 수 있다.

 

포식자 클래스

Predator 클래스니까 포식자만 해당되는 클래스인 것을 알 수 있다. (짐작할 수 있다.)

(각 클래스에 동물 이름과 포식성임을 명시하지 않아도 된다.)

 

아래의 인스턴스들은 실체가 있지만 Predator는 실체가 없다.

main 클래스

 

그리고 추가적으로 다른 포식자들을 표현할 때도 그냥 Predator클래스만 이용하면 된다.

 

추상화를 그림으로 표현하자면 아래와 같이 나타낼 수 있다.

추상화