3장. 타입과 추상화

KIMA·2023년 3월 19일
1
post-thumbnail

추상화를 통한 복잡성 극복

추상화란 어떤 양상, 세부 사항, 구조를 명확하게 이해하기 위해 특정 절차를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
예를 들어 헤리 백의 지하철 노선도는 기존 노선도에서 불필요한 지형 정보를 제거하고 역 사이의 연결성을 강조함으로써 지하철 노선도를 이용하는 승객의 니즈를 충족했다.

객체지향과 추상화

객체지향의 패러다임은 객체라는 추상화를 통해 현실 세계의 복잡성을 극복한다.
사람들은 본능적으로 공통적인 특성을 기준으로 객체를 여러 그룹으로 묶어 동시에 다뤄야 하는 가짓수를 줄임으로써 상황을 단순화려고 노력한다.
이처럼 공통적을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다.
개념을 이용하면 객체를 여러 그룹으로 분류할 수 있다.
갹체에 어떤 개념을 적용하는 것이 가능해서 개념 그룹의 일원이 될 때 객체를 그 개념의 인스턴스라고 한다.
즉, 객체란 특정한 개념을 적용할 수 있는 구체적인 사물을 의미한다. 개념이 객체에 적용됐을 때 객체를 그 개념의 인스턴스라고한다.

타입

컴퓨터 공학자들은 개념을 좀 더 멋지게 표현하기 위해 수학으로부터 차용해온 타입이라는 용어를 개념대신 사용한다.
타입의 정의는 개념의 정의와 근본적으로 완전히 동일하지만, 컴퓨터 내부로 들어오는 순간 기계적인 의미로 윤색될 수 밖에 없다.

데이터 타입

메모리 안에는 끝없이 펼쳐진 1과 0의 행렬만이 존재할 뿐, 타입이라는 질서가 존재하지 않는다.
메모리 안의 값의 의미는 그 값을 가져다 사용하는 애플리케이션이라고 부르는 외부의 해석가에 의해 결정된다.
애플리케이션(프로그래밍 언어)은 데이터의 용도와 행동에 따라 데이터를 타입으로 분류했고 타입 시스템이 자라나기 시작했다.

데이터는 자신에게 어떤 종류의 연산이 적용될 수 있는지에 따라 어떤 타입에 속하는지 결정된다.

  • 숫자형 - 사칙연산
  • 문자열 - 문자의 길이를 구하고, 두 데이터를 결합해 새로운 문자열로 만든다.

또한, 개발자는 타입에 속한 데이터가 메모리에 어떻게 표현하는지 알 필요가 없다. 단순히 데이터 타입에 사용되는 연산자만 알면된다.

즉, 데이터 타입은 메모리 안에 저장된 데이터의 종류를 분류하는 데 사용하는 메모리 집합에 관한 메타데이터다. 데이터에 대한 분류는 암시적으로 어떤 종류의 연산이 해당 데이터에 대해 수행될 수 있는지를 결정한다.

객체와 타입

같은 타입에 속한 객체는 행동만 동일하다면 서로 다른 데이터를 가질 수 있다. 같은 타입에 속한 객체는 동일한 요청에 대해 서로 다른 방식으로 응답하는 능력을 가진다. 이를 다형성이라 한다. 내부 표현 방식과는 무관하게 행동만이 고려 대상이라는 사실은 외부에 데이터를 감춰야 한다는 것을 의미한다. 따라서 훌륭한 객체지향 설계는 외부에 행동만을 제공하고 데이터는 행동 뒤로 감춰야한다. 이를 캡슐화라고 한다.

행동에 따라 객체를 분류하기 위해서는 객체가 내부적으로 관리해야 하는 데이터가 아니라 객체가 외부에 제공해야 하는 행동을 먼저 생각해야 한다. 이를 위해서는 객체가 외부에 제공해야 하는 책임을 먼저 결정하고 그 책임을 수행하는 데 적합한 데이터를 나중에 결정해야 한다. 흔히 책임 주도 설계라고 부르는 객체지향 설계 방법은 데이터를 먼저 생각하는 데이터 주도 설계 방법의 단점을 개선하기 위해 고안됐다.

클래스

객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이다. 객체를 분류하기 위해 타입을 결정한 후 프로그래밍 언어를 이용해 타입을 구현할 수 있는 한 가지 방법이 클래스이다.

Reference

  • 객체지향의 사실과 오해, 조영호 지음
profile
안녕하세요.

0개의 댓글