카테고리 없음

[정보처리기사 필기] SW 설계 : 객체지향 설계(OOP)

Yuco 2023. 1. 15. 20:15
정보처리기사 필기 1과목 - 소프트웨어 설계 : 객체지향 설계(OOP, Object-Oriented Programming)

 

[1] 객체지향 프로그래밍(OOP, Object-Oriented Programming)

1. 객체지향 프로그래밍 

- 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 어러 개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것 (각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있음)

- 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됨

 

2. 장점

- 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 함

 

3. 단점

- 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받음

 

[2] 객체지향 언어의 종류

- 객체지향 언어의 시초는 1960년 노위지안 컴퓨팅 센터의 조한 달과 크리스틴이 발표한 시뮬라67 

 

1. 스몰토크(SmallTalk)

- 객체지향 언어의 실질적 원조, 1970년대 말 제록스 기업의 팰러앨토 연구소에서 앨런 케이의 책임하에 만들어짐

 

2. 에이다(ADA)

- 1980년대 초 제안된 객체지향 언어 프로그램으로 미 국방성에서 개발, 파스칼의 문법을 기반으로 함

  • 장점 : 예외처리 기능의 도입 (신뢰도를 증가시키기 위한 필수적인 기능)
  • 단점 : 상속의 개념을 언어에 반영하지 않음, 또한 객체지향 언어가 대부분 동적 바인딩 방식을 채택하는 반면, 에이다는 정적 바인딩 방식을 사용

 

1990년대 초반

 

3. C, C++

- AT&T의 벨 연구소에서 비야네 스트롭스트룹 등에 의해 개발, C++은 가장 많은 사용자를 확보하고 있는 객체지향 언어

- C++의 가장 큰 특징은 점점 진화해간다는 것, 초기의 C++은 C에 클래스 개념만 도입된 것에 지나지 않았으나 중복, 상속, 가상 함수, 추상 클래스, 예외 처리와 같은 다양한 기능이 추가되면서 점차 향상되고 있음

 

4. JAVA

- 가전 제품에 사용될 소프트웨어의 개발 목적으로 썬마이크로시스템즈의 제임스 고슬링에의하여 고안된 언어

- 자바 언어의 장점은 언어의 단순성과 플랫폼의 독립성, 객체지향 패러다임에 충실하게 언어가 고안되었기 때문에 C++보다 오용의 소지가 다소 적음

 

5. Objective-C

- 브래드 콕스가 개발한 오브젝티브-C는 C++과 마찬가지로 C와 객체지향 언어를 혼합한 언어

- C++보다는 스몰토크에 좀 더 가깝게 정의된 언어

 

[3] OOP 기본 구성 요소 ⭐⭐

클래스 | 객체 | 메소드 / 메세지

 

1. 클래스(Class)

- 같은 종류(또는 문제 해결을 위한)의 집단에 속하는 속성(Attribute)과 행위(Behavior)를 정의한 것으로 객체지향 프로그램의 기본적인 사용자 정의 데이터형(User Defined Data Type)이라고 할 수 있음

- 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 함

- 공통된 속성과 연산을 갖는 객체의 집합 /객체지향 프로그램에서 데이터를 추상화 하는 단위

- 각각의 객체들이 갖는 속성과 연산(Method)을 정의하고 있는 틀

  • 인스턴스 (Instance) : 클래스에 속한 각각의 객체, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화(Instantiation)라고 
  • 슈퍼 클래스 (Super Class) : 특정 클래스의 상위(부모) 클래스 
  • 서브 클래스 (Sub Class) : 특정 클래스의 하위(자식) 클래스

 

2. 객체(Object) : 클래스의 인스턴스(실제로 메모리상에 할당된 것)

- 객체는 고유의 속성을 가지며 클래스에서 정의한 행위(Behavior)를 수행할 수 있음

- 객체의 행위는 클래스에 정의한 행위에 대한 정의를 공유함으로써 메모리를 경제적으로 사용

- 독립적으로 식별 가능한 이름을 갖고 있으며, 일정한 기억 장소를 갖고 있음

- 객체가 가질 수 있는 조건의 상태(State)는 일반적으로 시간에 따라 변함

- 객체와 객체는 상호 연관성에 의한 관계가 형성됨

- 객체가 반응할 수 있는 메시지의 집합을 행위(연산, Method)라고 하며, 객체는 행위의 특징을 나타냄

 

3. 메소드(Method), 메시지(Message)

- 클래스로부터 생성된 객체를 사용하는 방법으로 객체에 명령을 내리는 건 메시지

- 메소드는 한 객체의 서브루틴(Subroutine) 행태로 객체의 속성을 조작하는 데 사용됨

- 객체 간의 통신은 메시지를 통해 이루어짐

 

* 메시지와 메소드의 구분

- 메시지는 객체들 간의 상호작용하는 데 사용되는 수단이며, 메시지를 받았을 때 메소드를 수행 

 

[4] OOP 특징 ⭐⭐

캡슐화 | 정보 은닉 | 자료 추상화 | 상속 | 다중 상속 | 다형성 | 동적 바인딩

 

1. 캡슐화 (Encapsulation) 

- 구조적 설계에서 모듈화와 같은 의미로 객체를 정의할 때 연관된 자료 구조와 함수를 한 테두리로 묶는 것을 의미 

- 서로 관련 있는 데이터와 연산자를 하나로 묶어서 프로그램의 컴포넌트로 재사용할 수 있음

- 캡슐화된 객체의 세부 내용이 외부에 은폐 되어있기 때문에 변경이 발생할 때 오류의 파급 효과가 적음

- 객체 지향 개념애서 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만들기 때문에 인터페이스가 단순하고, 객체간의 결합도가 낮음

 

2. 정보 은닉 (Information Hiding)

- 캡슐화된 객체 내부에 자료 구조나 함수의 기능을 외부의 영향을 받거나 주지 않도록 설계하는 방법

- 임의의 하나의 객체를 수정함에 있어 다른 객체의 영향이 최소화되도록 하는 기술 (고려하지 않은 영향(Side Effect)들을 최소화하기 위해 사용)

- 다른 객체에 자신의 정보를 숨기고 자신의 연산만을 통하여 접근

- 유지보수와 소프트웨어 확장 시 부작용을 최소화할 수 있음

- 대부분 자료 구조만 은폐하고 메드는 제한적으로 접근을 허용하기도 함

 

3. 자료 추상화 (Abstraction) 

- 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것 , 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 함

- 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화 한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있음

- 객체지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드(함수), 메소드의 호출을 생성자라고 함

 

4. 상속 (Inheritance)

- 새로운 클래스가 기존 클래스의 자료와 연산을 이용할 수 있게 하는 기능

- 상속을 받는 새로운 클래스를 부 클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 하며, 새로운 클래스가 상속하는 기존의 클래스를 기반 클래스, 상위 클래스, 부모 클래스라고 함

 

5. 다중 상속 (Multiple Inheritance)

- 클래스가 2개 이상의 클래스로부터 상속을 받을 수 있게 하는 기능

- 클래스들의 기능이 동시에 필요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고, 프로그래밍 언어에 따라 사용 가능 유무가 다름(JAVA는 지원 안함)

 

6. 다형성 (Polymorphism)

- 어떤 한 요소에 여러 개념을 넣어 놓는 것, 일반적으로 오버라이딩 / 오버로딩을 의미

* 오버라이딩? 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것

* 오버로딩? 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것

 

7. 동적 바인딩

- 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비되는 개념