본문 바로가기
컴퓨터공학/정보처리기사

객체 지향 설계에 관한 개념 정리

by 운명론자 2023. 1. 30.

객체 지향의 개념을 먼저 알아보자. 객체 지향은 실세계의 개체를 속성 그리고 메서드가 결합한 형태의 객체로 표현하는 방법이다. 이러한 객체 지향의 구성요소에는 클래스, 객체, 메서드, 메시지, 인스턴스 그리고 속성이 있다. 먼저 클래스에 대하여 설명하자면 특정한 개체 안에 있는 변수와 메서드를 정의하는 틀이라고 할 수 있다. 객체 지향 프로그래밍에서 추상화한 데이터를 나타내는 단위이며, 하나 이상의 비슷한 객체들을 묶어 공통된 하나의 특성을 표현한다. 또한 속성은 변수의 형태, 행위는 메서드 형태로 선언된다. 객체란 물리적, 추상적으로 자신과 다른 것을 구분할 수 있는 대상이다. 클래스에서 정의 내린 것을 토대로 메모리에 할당된다. 이러한 객체는 각각의 상태와 구별성을 가지게 된다. 메서드란 클래스로부터 만들어진 객체를 사용하는 방법이다. 객체가 메시지를 받으면 실행할 객체의 자세한 연산이며 전통적인 시스템 함수 또는 프로시저에 해당하는 연산 기능을 한다. 메시지란 객체끼리 서로 상호 작용하도록 하는 수단이다. 객체에게 어떠한 행위를 할 수 있도록 지시하는 방법이며 이러한 객체끼리의 상호 작용은 메시지를 통해 이뤄진다. 메시지는 객체끼리 전달된다. 인스턴스란 객체 지향 기법에서 클래스를 통하여 만들어낸 실질적인 실형 객체이다. 클래스에 속해있는 각각의 객체이며 메모리상에 할당된다. 마지막으로 속성이란 한 클래스 안에 속해있는 객체들이 가진 데이터 값을 단위별로 정리한 것이다. 성질, 현재 상태, 식별, 수량, 분류 등에 관한 표현되는 값이라 볼 수 있다. 객체 지향 기법에는 어떠한 것들이 있을까? 객체 지향 기법은 크게 여섯 가지로 나뉜다. 캡슐화, 상속성, 다형성, 추상화, 정보 은닉, 관계성이다. 먼저 캡슐화에 대하여 알아보자. 캡슐화는 서로 관련된 데이터 그리고 함수를 같이 묶어 외부와에 경계를 만들고 거기서 필요한 인터페이스만을 밖으로 꺼내 드러내는 기법이다. 이러한 기법은 결합도는 낮고 재사용이 용이하며 인터페이스를 단순화할 수 있다. 또한 정보 은닉과 깊은 관계가 있으며 변경이 발생될 때 오류의 파급 효과가 낮다는 장점이 있다. 두 번째 상속성은 상위에 클래스의 속성 그리고 메서드를 하위에 있는 클래스에서 재정의 하지 않고 물려받아 사용하는 방법이다. 세 번째 다형성 기법은 하나의 메시지에 관하여 각각의 객체가 갖고 있는 고유한 방식으로 응답할 수 있는 능력이다. 이러한 다형성 기법은 상속받은 여러 하위 객체들이 또 다른 형태적 특징을 가지고 있는 객체로 이용되는 성질이 있다. 다형성 기법에는 오버로딩과 오버라이딩이 대표적인데 오버로딩이란 매개변수의 유형과 수를 달리하여 같은 이름의 메서드를 여러 개 가질 수 있는 기법이고 오버라이딩이란 상위 클래스에서 정의 내린 메서드의 구현을 하위 클래스에서 상관없이 무시한 채 재정의할 수 있는 방법이다. 네 번째 추상화 기법은 공통 성질을 뽑아내어 추상 클래스를 설정하는 것이다. 추상화 기법의 종류론 과정 추상화, 제어 추상화, 자료 추상화가 있다. 다섯 번째 정보 은닉 기법이란 코드 안에 데이터와 메서드를 숨기고 공개된 인터페이스를 이용해서만 접근이 가능한 코드 보안 기술이다. 필요 없는 정보는 접근하지 못하도록 하여 하나의 모듈 또는 하부 시스템이 또 다른 모듈의 구현에 영향받지 않도록 설계된다. 모듈 안에 자료 구조 그리고 접근 동작들만 수정을 제한하지 않아 요구사항 같은 변화에 따라 마음대로 수정을 할 수 있다. 모듈들 사이에서 독립성을 지키는 데 도움을 주며 설계에서 은닉돼야 할 기본적인 정보로는 IP 주소 같은 상세 데이터 구조, 물리적 코드 등이 있다. 마지막 여섯 번째 관계성 기법에는 다섯 가지가 있다. 연관화, 집단화, 분류화, 일반화, 특수화가 그것이다. 크게 관계성 기법이란 두 개 이상의 엔터티 형에서 데이터를 참조하는 관계를 의미한다. 연관화란 클래스와 객체의 이용관계 및 참조이며 같은 층에 속해있는 클래스들 사이에서 상호 의존성을 나타내는 비계층적 관계성을 보인다. 집단화란 서로 관련성이 있는 여러 가지의 객체들을 묶어 한 가지의 상위 객체를 만들어 낸다. 일반화와는 다르게 상위 클래스의 특성들이 하위 클래스로 상속되거나 하지는 않는다. 분류화란 공통적인 속성에 의하여 정의 내려진 객체 구성원들의 인스턴스이다. 일반화란 클래스들끼리의 개념적인 포함 관계이며 상위 클래스의 특징을 하위 클래스가 상속받는다. 특수화란 상위 클래스의 특징들을 상속받지만 나름대로 하위 클래스에서 수정을 하여 자신만의 고유한 특징을 가질 수 있는 관계이다. 다음으로 객체 지향 설계 원칙에 대하여 알아보자. 객체 지향 설계 원칙은 다섯 가지가 있다. 단일 책임의 원칙, 개방 폐쇄 원칙, 리스코프 치환의 원칙, 인터페이스 분리의 원칙 그리고 마지막으로 의존성 역전의 원칙이 있다. 단일 책임의 원칙이란 하나의 클래스는 한 가지의 목적을 위하여 생성되며 하나의 책임을 수행하기 위하여 클래스가 제공하는 모든 서비스가 집중되어야 한다는 원칙이다. 이러한 단일 책임의 원칙은 객체 지향 프로그래밍의 다섯 가지 원칙 중 나머지 네 가지 원칙의 기초 원칙이 되어야 한다. 개방 폐쇄 원칙이란 컴포넌트, 클래스, 함수, 모듈과 같은 소프트웨어의 구성요소는 확장에는 열리고 변경에는 닫혀야 한다는 원칙이다. 리스코프 치환의 원칙은 상속받은 하위 클래스인 서브 타입이 어디서든 상위 클래스인 자신을 기반한 타입으로 교체할 수 있어야 한다는 원칙이다. 인터페이스 분리의 원칙은 하나의 클래스는 본인이 사용하지 않는 인터페이스를 구현하지 않아야 한다는 원칙이다. 다시 말해 클라이언트가 사용하지 않는 인터페이스로 인하여 영향을 받지 않아야 한다는 원칙이다. 마지막으로 의존성 역전의 원칙이란 실제로 사용 관계는 바뀌지 않으며, 추상적인 매개로 메시지를 주고받아 관계를 가능한 느슨하게 만드는 원칙이다. 쉽게 말해 의존성 관계를 맺는다면 변하기 쉬운 것보단 잘 변하지 않는 것에 의존 관계를 맺으라는 뜻이다. 변경이 잦은 클래스를 의존할 경우에 변경요소가 발생하면 다른 의존 코드 부분까지 전부 수정이 필요하다. 추상 클래스나 인터페이스와 같은 변화가 없는 것을 참고하게 되면 변경에 따른 추가적인 수정이 없을 수 있다.

댓글