본문 바로가기
2.1 CS/소프트웨어공학

[CS/소공] 객체지향프로그래밍(OOP)

by Dohi._. 2024. 9. 18.
728x90

프로그래밍을 하다보면 다양한 기능을 위해서 코드를 짜기 마련인데

많은 코드가 늘어날 수록 수정을 해야하는 경우가 생기기 마련이다.

 

간단하게 예시를 왜 객체지향프로그래밍이 나왔는지 이해해보려고 합니다.

 

수정을 위해서 수정하고자 하는 코드가 어디있는지 알기위해서

미리 코드를 분류를 해놓게 되면 추후에 수정하는 코드를 분류된 기준으로 찾기 쉬울 겁니다.

그러다 사용하는 라이브러리가 바뀌게 되면 모든 코드를 바꾸지 않고

필터를 교체하듯이 모듈을 교체할 수 있으면 쉬울 것입니다.

 

이러는 와중에 Class라는 개념이 나오고

이는  프로그램의 코드를 체계적으로 분류하고 같은 역할을 하는 코드를 응집성 있게 모아주는 역할을 합니다.

 

또한 만약 스파게티 코드(GOTO문), 무한IF문을 하여 코드를 작성하면 변경이 어려워지게되겠죠 

어느 곳이 문제인지 몰라서 파악이 힘들게 되면 변경이 어렵고 수정하기가 어려워 지게됩니다.

 

이러한 모든 문제를 해결하기 위해서 사용되는 것이 

 

객체지향 프로그래밍 (Object Oriented Programming)

데이터(상태, State,Field)와 로직(행위, Methods)이 응집되어 상호 교류하며 동작하도록 만드는 프로그래밍 기법으로  

즉, 소프트웨어를 수정이 쉽게 유지하기 위해 하기 위해 나온 기법 으로 이해하면 편할 것 같습니다.

 

간단하게 객체지향의 주요 개념을 정의하고 마무리 하도록 하겠습니다.

 

객체지향 개념의 가장 기본적인 구성요소는 객체(Object)입니다

 

객체

객체는 문제 도메인에서 의미가 있는 정체성( identity)을 갖는 것을 의미한다.

객체는 위에서 말했듯 상태(데이터)와  행위(로직)를 갖는다.

상태는 객체가 가지는 속성을 의미하며 

행위는 객체가 수행할 수 있는 작업을 의미한다.

 

Rumbaugh는 객체를 다음과 같이 정의하였다.

A discrete entity with a well defined boundary and identify that encapsulates state and behavior
- 잘 정의된 경계와 정체성을 가지며 상태와 행위를 캡슐화한 개별 엔티티

 

자바에서는 상태를 필드, 행위를 메소드라고 부른다.

 

Class

간단하게 말하면 클래스는 객체의 틀이다.

즉 클래스를 정의하는 것은 객체들이 공통으로 갖는 특징을 정의하는 것입니다.

예를 들어 '사람'은 Class이고  '도히'는 객체입니다.

또한 객체는 클래스의 실제 보기이므로 객체를 클래스의 인스턴스라고도 부릅니다

 


캡슐화 & 정보은닉

객체는 상태와 행위를 갖는다고 했는데

상태와 행위를 하나로 묶는 것을 캡슐화(Encapsulation)이라고 한다

객체지향에서 클래스는 캡슐화를 지원하는데 

캡슐화를 지원하는 클래스를 통하여 객체 내부의 상태 데이터를 외부 객체로부터 보호할 수 있는데 이를 정보은닉이라한다.

즉, 캡슐화는 정보은닉을 포함하는 개념이다.

객체의 데이터는 외부 객체로 부터 직접 접근이 될 수 없으며 외부 객체가 데이터에 때한 접근이 필요할 때는 메소드 호출로 간접적으로 접근될 수 있다.

 

상속(inheritance)

상속은 기존 클래스의 상태와 행위를 재사용하는 방법으로 

클래스 사이에 계층 구조가 성립할 때 발생하게 된다.

상속의 계층 구조는 일반화 과정을 통하여 만들어 지는데 여기서 일반화는 여러 클래스 사이에 공통적인 특징을 파악하여 더울 일반적인 상위 클래스를 정의하는 것이므로 추상화 개념과 유사하다.

상위 클래스(Super class, 부모클래스라고도 부름)는 하위클래스(Sub class, 자식클래스라고도 부름)보다 더욱 일반적인 특징을 포함한다. 

 

예를 들어서 이해를 하면

학생, 직원클래스의  상위 클래스는 사람클래스이고  사람 클래스에 대하여 학생,직원 클래스는 하위클래스가 된다.

 

 

다형성(Polymorphism)

특정 객체가 다양한 클래스 타입이 될 수 있다는 것을 다형성이라고 한다.

하위클래스는 상위 클래스의 특징을 상속하는 것과 자신만의 특징을 갖는데 이는 하위 클래스는 상위클래스의 어떠한 타입이라도 될 수 있다는 것을 의미한다. 하지만 상위클래스가 하위클래스가 되는것은 성립하지 않는다.

 

728x90

댓글