▸JAVA/기본 상식

객체지향 언어의 특징(추상화) [1/4]

코데방 2019. 12. 9.
728x90

그럼 객체지향언어가 가지고 있는 대표적인 특징을 기준으로 C언어와 Java를 비교해보겠습니다.

1. 추상화 (Abstract)

  • 중요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것
  • Java에서는 하나의 객체를 추상화하여 클래스를 만든다고 표현함

 

C언어에서는 구조체가 Java의 클래스에 가장 가까운 개념입니다. 어떠한 목적에 필요한 타입이 다른 여러 변수를 하나의 구조체에 묶어서 정의해둠으로써, 필요할 때 그 구조 전체를 가져다 쓰는 것이죠. 사실 변수들을 각자 따로 만들어서 써도 무방하지만 구조체를 이용하면 보다 직관적으로 데이터 구조를 확인하고 사용할 수 있습니다. 이 개념이 확장되어 발전된 것이 객체이며 Java의 클래스라고 볼 수 있습니다.

같은 구조의 정보를 담는 변수들을 반복해서 사용해야한다면, 아래와 같이 변수를 각각 생성해줘야 합니다.

 

하지만 구조체를 쓰면 위 구조를 매우 간결하고 직관적으로 바꿀 수 있습니다. 구조체의 선언과 같이 어떠한 정보를 묶음으로 표현할 때 우리가 필요한 정보들의 형태만 모아서 선언해주는 것을 추상화라고 합니다. 아무런 정보는 없지만 우리가 학생이라는 하나의 객체를 표현하기 위해 이름, 나이, 키의 정보가 필요하다고 정해두는 것입니다. 학생의 수많은 정보 중 공통적이면서 꼭 필요한 속성만 하나의 구조체에 모아둔 것입니다.

추상화 과정을 통해 구조체를 만들고, 실제로 1~6번 학생의 정보를 받아서 이 구조체라는 틀을 사용해 만들어진 정보가 바로 객체입니다. 구조체는 복도에 비치된 양식지이고 그 양식지를 하나 가져와서 실제로 쓰려고할 때 이 양식지는 드디어 의미가 있는 객체가 되는 것이죠.

 

 

Java의 클래스는 이러한 구조체의 개념을 발전시켜 클래스(Class)라는 개념을 사용합니다. 클래스 안에는 비슷한 기능을 수행하기 위해 필요한 변수들과 메소드(함수)들이 존재합니다.

예를 들어 학생들의 정보를 바탕으로 반을 배정하는 기능을 하는 클래스가 하나 존재한다고 하면, 아래와 같이 이에 필요한 정보들을 먼저 설계해야 합니다. 학생의 정보는 아주 많겠지만 그중에서 이름, 나이, 키의 정보만 가지고 무언가를 하겠다는 것이죠. 이 정보들이 클래스의 변수(필드)가 됩니다.

또한 이 클래스는 학생들의 반을 배정하는 기능을 담당하고 있기 때문에, 이 학생들의 정보를 적절히 가공해서 순서대로 반에 배정해주는 행위를 해야합니다. 이것이 메소드(함수)입니다. 이런식으로 수많은 정보 중 클래스의 기능을 수행하기 위해 꼭 필요한 정보와 행위를 묶어서 설계하는 것을 추상화라고 합니다.

학생이 입학했을 때 처리할 일을 정해둔 메뉴얼이 클래스라면, 어느 학생이 이 메뉴얼을 한장 들고 가서 정보를 작성하고 반을 배정받는 과정 전체를 하나의 추상화된 객체라고 볼 수 있습니다. 각각 다른 정보이고 다른 행위이지만 "반을 배정받기 위함"을 기준으로 한 하나의 추상적 개념(객체)으로 인식하는 것입니다. 이 추상적 개념안에는 정보(변수)와 행위(메소드)가 포함됩니다.

 

 

 


 

추상화는 현실을 제왼 모든 언어가, 나아가서는 모든 학문이 가지고 있는 개념입니다. 객체를 중요시하기에 추상화라는 특징을 더 부각하고 있는 것 같은데 크게 의미가 있는 것 같진 않습니다. 그냥 하나의 공통된 속성을 모아서 클래스를 설계하는 것을 추상화라고 생각하시면 됩니다.

728x90

댓글

💲 추천 글