CS/개발상식

[개발상식] 객체 지향 프로그래밍 (OOP)

bu119 2023. 6. 29. 16:30
728x90
반응형
객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
- 위키피디아 -

 

 

객체지향 프로그램밍(Object-Oriented Programming)은 프로그래밍 패러다임 중 하나로, 상태(state)와 행위(behave)로 이루어진 객체들간의 상호작용을 통해 프로그램을 설계, 개발 하는 것이다. 즉, 쉽게 말해 객체지향 프로그래밍은 객체를 만드는 것이다. '객체' 라는 말은 Object를 직역한 말인데, 쉽게 말해 변수와 메소드를 그룹핑 한 개념이다.

 

즉, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 

 

객체지향 프로그래밍의 장점

1) 코드 재사용 용이
모듈화된 객체, 그리고 상속을 통해 코드의 재사용을 높일 수 있다.

 

2) 생산성 향상
독립적인 객체를 사용함으로써 개발의 생산성을 향상시킬 수 있다. 이미 생성된 클래스를 상속 받거나, 객체를 재사요, 부분 수정 등 적은 노력으로 높은 효율을 만들어낸다.

 

3) 자연적인 모델링 가능
현실세계에서 사용하는 개념을 대입하여, 생각한 것을 그대로 구현할 수 있다.

 

4) 유지보수 용이
프로그램 수정, 추가시에도 캡슐화 덕분에 주변 코드에 영향이 덜 가기 때문에 유지보수가 용이하다.

 

객체지향 프로그래밍의 단점

1) 실행속도 느림
전반적으로, 객체지향 언어(C++, Java, ruby)는 컴퓨터의 처리 구조와 비슷한 절차지향 언어(C언어)보다 상대적으로 실행속도가 느리다.

 

2) 프로그램 용량이 커질 수 있음
객체단위로 프로그램을 많이 만들다보면, 불필요한 정보들이 들어갈 수 있는데 프로그램의 용량이 증가될 수 있다.

 

3) 설계에 많은 시간 소요
초기에 클래스별, 객체별, 상속 등의 구조 등을 모두 설계해야 하기 때문에 절차지향 언어에 비해 설계 시간이 많이든다.

 

 

객체 지향 프로그래밍의 특징

1. 캡슐화 (Encapsulation) : 데이터와 함수를 하나로 묶는다.

  • 데이터의 세부 내용이 객체 은닉된다. 즉, 데이터 변경으로 인한 에러가 줄어들고, 객체들간에 데이터를 자세히 알 필요가 없으므로 코드가 단순해진다.
  • 객체와 함수의 재사용이 쉽다.

2. 정보은닉 (Information Hiding) : private으로 선언한 데이터는 자기 자신을 통해서만(setter, getter) 접근 가능하다.

  • 각 객체간의 수정이 다른 객체에 미치는 영향을 최소화 한다.
  • 외부 객체의 직접 접근을 막아 프로젝트 확장 시 오류를 최소화 한다.

3. 추상화 (Abstraction) : 불필요한 부분은 생략하고 중요한 것에만 초점을 맞춰 모델로 만든다.

  • 복잡한 모델을 중요한 것 만 추려 추상화 함으로써 시스템 구조를 시각적으로 표현할 수 있다.
  • 완전한 시스템이 구축되지 않더라도 개략적으로 모델을 만들어 테스트 하고 살을 붙여나갈 수 있다.

4. 상속성 (Inheritance) : 부모클래스에 정의된 모든 것을 자식 클래스가 물려받는다.

  • 재정의 할 필요가 없어 코드 작성이 간결해진다.
  • 상속으로 인한 최소한의 규칙을 통해 프로젝트의 확장 시 오류를 최소화 한다.
  • 자식클래스에서 새로운 함수를 추가하거나 부모 클래스의 함수를 재정의(Overriding)해 사용할 수 있다.
  • 클래스의 재사용이 쉽다.

5. 다형성 (Polymorphism) : 호출하는 객체에 따라 다른 동작을 한다.

  • 하나의 클래스에서 같은 이름의 함수를 여러 개 가질 수 있다(Overloading). 호출하는 객체가 어떤 인풋 파라미터를 사용해 호출하냐에 따라 각자 다른 함수가 호출되게 한다. 즉, 비슷한 기능을 하는 다른 함수를 만들 때 불필요하게 너무 많은 함수명을 만들어 내 가독성이 떨어지는 문제를 해결할 수 있다.

 


참고자료

https://xangmin.tistory.com/152

https://velog.io/@khy226/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-OOP-%EC%9D%B4%EB%9E%80

https://greendreamtrre.tistory.com/601

728x90
반응형