OOP - Object Oriented Programming(객체지향프로그래밍)이란 무엇이며 왜 배우는가?

 

OOP(객체지향프로그래밍)란 무엇이며 왜 배우는가?

부제:정말 방법이 이것밖에 없나?

프로그래밍 책이나 강의 조금만 들어가면 꼭 나오는 단어가 있습니다. 바로 OOP(객체지향 프로그래밍)

근데 솔직히 설명만 들어서는 머리에 잘 안 들어오죠. 


필자는 대학교에서 나는 파이썬을 처음배우고 그후 c와 자바를 순서대로 배웠습니다

당연히 절차지향과 객체지향프로그래밍이란 단어도 들어보고

교수님 설명을 들었는데 들어도 계속이해가 확실히 안되는게

그래서 객체랑 절차랑 도대체 뭐가 다른건데?

그리고 굳이 굳이 객체지향으로 만드는 이유가 뭔데?


그외에도 저는 객체지향을 배우면서 여러가지 질문이 들었는데

1.정말 이방법이 최선인가?

2.이 방법밖에 없나?

3.좀더 편한 방법이 분명히 있을텐데?

4.왜 문제를 해결하기 위해 문제를 만들지?

5.OOP를 굳이 배워야하나?

라는 생각이 자연스럽게 들었습니다



ai에게 객체지향이 뭔지 물어보면 답이 이렇습니다

{

OOP(객체 지향 프로그래밍)은 데이터와 그 데이터를 처리하는 메서드를 '객체'라는 단위로 묶어, 객체 간의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임입니다. 객체 지향 프로그래밍은 코드의 재사용성, 유지보수 용이성, 그리고 큰 규모의 프로젝트 관리에 유리하며, 이를 위해 추상화, 캡슐화, 상속, 다형성이라는 핵심 특징들을 활용합니다. 
객체 지향 프로그래밍(OOP)의 핵심 개념
  • 객체(Object): 
    현실 세계의 사물이나 개념처럼 데이터(속성)와 이를 처리하는 메서드(동작)를 하나의 단위로 묶어 놓은 것입니다. 
  • 클래스(Class): 
    객체를 만들기 위한 설계도 또는 틀과 같으며, 어떤 객체가 가질 데이터와 메서드를 정의합니다. 
OOP의 4가지 주요 특징
  1. 추상화 (Abstraction): 
    복잡한 실제 세계의 정보를 객체라는 단순화된 모델로 표현하는 것입니다. 
  2. 캡슐화 (Encapsulation): 
    객체 내부의 데이터와 메서드를 하나의 단위로 묶고, 외부에서는 필요한 부분만 접근할 수 있도록 하여 정보 은닉성을 확보하는 것입니다. 
  3. 상속 (Inheritance): 
    이미 존재하는 클래스의 특징(데이터와 메서드)을 새로운 클래스가 물려받아 재사용하는 것입니다. 
  4. 다형성 (Polymorphism): 
    여러 다른 객체들이 동일한 메시지에 대해 각자의 방식으로 응답할 수 있도록 하는 것입니다. 
OOP의 장점
  • 코드 재사용성: 
    객체 단위로 코드가 모듈화되어 있어 다른 로직에 쉽게 가져다 쓰거나 활용할 수 있습니다. 
  • 유지보수 용이성: 
    객체 수정 시 해당 객체를 사용하는 모든 로직에 일괄 적용되므로 중복 코드 관리가 간편하고, 유지보수가 쉬워집니다. 
  • 큰 규모의 프로그래밍 유리: 
    객체 및 모듈 단위로 구분이 쉬워 업무 분장이 용이하고, 각 모듈의 연관성을 파악하고 도식하기 좋습니다. 
OOP의 단점 
  • 비교적 느린 속도: 
    객체 간의 의존 관계가 많아 절차 지향 방식에 비해 실행 속도가 느릴 수 있습니다.
  • 높은 설계 역량 요구: 
    모듈화된 상호작용 방식은 정확한 모듈 명세와 연관성 설계가 중요하므로 높은 설계 능력이 요구됩니다.

}

네....... 

ai가 정리는 잘하지만 이건 비전공자나 코딩초보자 입장에서는 봐도 봐도 

뭔뜻인지 잘 와닿지 않을겁니다

전공자인 저도 처음 들었을떄 잘 와닿지 않았으니까요.

그래서 객체 지향에 나오는 개념을 

제가 알기쉽게 좀 더 생활적인 비유로 풀어보겠습니다.


OOP(객체 지향 프로그래밍), 비유로 쉽게 풀어서 이해하기  



1. 절차지향 vs 객체지향

게임으로 치면 이겁니다.

  • 절차지향은 1인칭 시점. 내가 직접 뛰고, 쏘고, 행동하는 방식.

  • 객체지향은 3인칭 시점. 캐릭터를 만들어 놓고, 내가 그 캐릭터를 조종하는 방식.

차이는 단순합니다. 내가 다 하는 게 절차지향, 캐릭터(객체)를 만들어 시키는 게 객체지향.


2. 파이썬 기본 모듈, 자바 기본 클래스

파이썬에서 다른 문서 가져올 때 importfrom 이런 거 쓰죠.
이건 마치 논문 참고문헌이나 기사 출처 달아놓는 거랑 똑같습니다.
“이 기능은 저 문서에서 가져온 거야” 하고 알려주는 거죠.

근데 어떤 사람은 이렇게 말할 수도 있습니다.

“남이 만든 설계도/문서를 내가 왜 써? 자존심 상하게.”

“남이 만든 법을 내가 왜 배우고 따라야해? 자존심 상하게.” 

그럼 답은 간단합니다.
니가 직접 만들면 됩니다. 남 걸 쓰기 싫으면 새로 만들면 되니까요.

하지만 그게 쉽지않죠? 


3.클래스와 인스턴스의 차이는?

답: 클래스는 설계도, 인스턴스는 건물

클래스는 그냥 설계도일 뿐입니다.
설계도만 있다고 건물이 뿅 하고 생기지 않죠.
마찬가지로 컴퓨터도, 클래스만 있다고 실제로 쓸 수 있는 건 없습니다.

실제로 사용하려면 인스턴스를 생성해야 합니다.
생성자 호출을 하면 메모리 공간을  사용하고, 거기에 객체가 자리 잡는 겁니다.
쉽게 말해 설계도를 들고 땅에다가 집을 하나 지은 거죠.


4. 그런데 문제

집을 지었는데 못 들어가는 상황이 생깁니다.
왜? 주소를 모르니까.

컴퓨터는 이미 0x111 같은 주소를 알고 있지만, 사람은 이런 숫자 외우고 다닐 수가 없습니다.


5. 그래서 변수가 필요하다

그래서 붙여주는 게 바로 변수라는 별명입니다.
예를 들어 player1 = Character() 라고 하면,
이제부터 그 객체는 player1이라는 이름으로 불릴 수 있습니다.

주소를 몰라도 별명만 부르면 바로 접근 가능.
집 앞에다가 표지판 달아주는 거랑 똑같은 원리입니다.


6. 마인드셋 이야기

프로그래밍 얘기하다가 살짝 옆길로 가는 것 같지만, 사실 같은 맥락입니다.


“니네들은 왕, 여왕이 될 애들이다.

 

나라 망하면 이성계가 그랬던 것처럼 니네가 접수해라.”

 

이런 마인드가 필요합니다.


코드 몇 줄 배우는 게 다가 아니라, 세상을 바라보는 관점 자체가 바뀌어야 진짜 실력이 쌓입니다.


7. 국어100점학생, 수학100점학생, 수영100점학생, 영어100점학생 ,과학 100점학생 ,역사 100점학생이 붙으면 누가이길까요?

마지막으로 공부 얘기 하나 더.

  • 국어 100

  • 수학 100

  • 수영 100

이 셋이 배틀로얄을 붙으면 누가 이길까요?
정답은 국어 100 찍은 사람입니다.

왜냐면 결국 프로그래밍도 말하기, 글쓰기, 소통이 제일 중요하기 때문입니다.
보고서 잘 쓰는 법, 사과하는 법, 사람 설득하는 법… 이런 게 진짜 국어고, 진짜 실력입니다.


마무리

정리해보면 이렇습니다.

  • 모듈은 참고문헌

  • 클래스는 설계도

  • 인스턴스는 건물

  • 변수는 건물 앞 표지판

OOP를 이해하는 데 괜히 어렵게 생각할 필요 없습니다.
결국 객체지향도 사람이 살아가는 방식, 생각하는 방식을 그대로 옮겨놓은 거니까요.

댓글

가장 많이 본 글