1554 단어
8 분
[ OOP ] 객체지향 프로그래밍(OOP) 개요

OOP란?#

Object-Oriented Programming (OOP)는 프로그래밍 패러다임 중 하나로, 실제 세상을 시뮬레이션하는 방식보다는 “객체”라는 개념을 중심으로 사고하는 방식을 요구한다. 이는 실세계를 그대로 반영하는 것이 아니라, 프로그램 내에서 객체들이 주체성을 가진 존재처럼 행동하는 환경을 만들어낸다.

OOP의 4대 특성#

image

OOP는 주로 네 가지 핵심 개념으로 설명되곤 한다. 하지만 문헌에 따라 세 가지로 설명하거나, 더 많은 개념을 포함하기도 한다. 여기서는 기본적인 네 가지 특성에 대해 말해보려 한다.


1. 캡슐화#

캡슐화는 데이터와 그 데이터를 처리하는 메서드를 하나로 묶는 것을 말한다. 객체는 내부에 데이터를 가지고 있고, 그 데이터는 외부에서 직접 접근할 수 없도록 보호된다. 이를 ‘정보 은닉’이라고도 한다. 외부에서는 객체 내부의 데이터에 접근할 수 없고, 오직 객체 내부의 메서드를 통해서만 데이터를 조작할 수 있다. 이렇게 데이터를 보호함으로써 객체 간의 결합도를 낮추고, 시스템을 더욱 견고하게 만들 수 있다.


2. 상속#

상속은 이미 존재하는 클래스(부모 클래스)를 바탕으로 새로운 클래스를 만드는 것을 말한다. 상속을 통해 새롭게 만든 클래스는 부모 클래스의 속성과 메서드를 모두 물려받는다. 여기에 새로운 속성이나 메서드를 추가할 수도 있다. 상속의 실용적인 장점은 코드 중복을 방지하는 것이다. 공통된 기능을 부모 클래스에 정의하고, 자식 클래스들은 그 기능을 그대로 상속받아 사용함으로써 중복된 코드를 줄일 수 있다.


3. 다형성#

다형성은 OOP의 가장 중요한 특성 중 하나로, 동일한 인터페이스를 통해 여러 다른 객체들이 각기 다른 방식으로 동작할 수 있게 한다. 예를 들어, 같은 함수 호출이지만 객체의 종류에 따라 실제로 실행되는 메서드가 달라질 수 있다. 이는 프로그램이 실행 중에 어떤 메서드를 호출할지 결정하는 ‘늦은 바인딩’을 통해 이루어진다. 다형성 덕분에 다양한 객체들을 동일한 방식으로 다룰 수 있어 코드의 유연성과 재사용성을 높여준다.


4. 추상화#

추상화는 복잡한 시스템을 단순화하여 중요한 부분만을 드러내고, 불필요한 세부 사항은 감추는 것을 말한다. OOP에서는 데이터와 메서드의 구체적인 구현 방법을 감추고, 외부에서는 그 객체가 어떤 데이터를 가지고 있는지 알 필요가 없다. 대신, 객체가 제공하는 메서드를 통해서만 상호작용할 수 있다. 추상화는 캡슐화를 통해 실현되며, 객체 내부의 복잡성을 숨기고 사용자에게는 간결한 인터페이스만 제공한다.


객체에 대한 사고방식의 전환#

OOP를 이해하려면 객체에 대한 사고방식 전환이 필요하다. 현실 세계의 물체는 대부분 수동적인 존재다. 누군가 조작하지 않으면 아무 일도 일어나지 않는다. 하지만 OOP 세계의 객체들은 조금 다르다. 이 객체들은 어느 정도 자기 주관을 가지고 행동하는 주체로 볼 수 있다. 그래서 ‘물체’보다는 ‘객체’라는 용어가 더 적합하다. 심지어 일부 이론에서는 객체를 거의 완벽한 주체성을 가진 존재로 보기도 한다. 물론 그 정도까지 가지는 않더라도, 현실의 물체보다는 더 능동적으로 동작한다고 보는 것이 OOP의 기본 철학이다.


OOP 공부 가이드라인#

이 내용은 내가 들었던 강의에서 해주신 말씀이다.

  1. 프로그래머의 기본 자세를 확실히 잡을 것
    1. 읽기 명확한 코드 만들기
    2. 실수를 저지르기 어려운 코드 만들기
    3. 문제를 해결하는 코드 만들기
    4. 문제가 생기면 디버깅 하기
  2. 필요에 따라 유연성을 키우는 법을 배워 나가기

OOP를 공부할 때는 몇 가지 기본 자세를 갖추는 것이 중요하다.

먼저, 읽기 쉽고 명확한 코드를 작성해야 한다. 복잡한 코드보다는 직관적이고 간단한 코드가 유지 보수에 유리하다. 또한, 실수를 저지르기 어려운 코드를 작성하는 것이 중요하다. 잘못된 데이터를 입력하더라도 그 영향이 최소화되도록 방어적인 코드를 작성해야 한다.

그리고 문제를 해결하는 능력, 디버깅하는 능력도 필요하다. 코드에서 문제가 발생했을 때, 논리적이고 체계적으로 접근해서 원인을 찾아내고 해결하는 방법을 배워야 한다. 마지막으로, 필요할 때 유연하게 코드를 확장하고 변경할 수 있는 능력을 키우는 것도 중요하다. 너무 많은 기능을 구현하려 하지 말고, 필요한 것만 만들어야 한다.


결국, OOP의 핵심은 현실 세계를 완벽하게 시뮬레이션하는 것이 아니다. 어디서 선을 그어야 할지 아는 것이 중요하다.




출처

[ OOP ] 객체지향 프로그래밍(OOP) 개요
https://blog-full-of-desire-v3.vercel.app/posts/oop/-oop---oop-/
저자
SpeculatingWook
게시일
2024-10-17
라이선스
CC BY-NC-SA 4.0