[OOP/C++] 객체지향 프로그래밍이란?

신지한·2024년 4월 23일
0

면접준비

목록 보기
2/9
post-thumbnail

📢 공부내용에 앞서서

본 게시글은 면접준비 및 자기계발을 목적으로 작성된 게시글입니다
공부한 내용을 토대로 남들에게 설명할 수 있도록 이해하는 과정에 작성한 게시글이니 참고바랍니다

📖 객체지향 프로그래밍이란?

프로그램 설계방법론의 일종으로, 명령형 프로그래밍에 속한다.

프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 '메소드, 변수'를 가지며, 특정 역할을 수행하도록 인간이 정의한, 추상적인 개념이다..

- 나무 위키

📌클래스와 객체(인스턴스)

■ 클래스

어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behaviour)변수와 메서드로 정의한 것

■ 객체(인스턴스)

프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미

값을 저장할 변수와 작업을 수행할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다

+) 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것

객체 지향 프로그래밍 언어에는
C++, C#, Java, Python, JavaScript, Ruby, Swift등이 있다.

📌 절차적 프로그래밍과 객체지향의 차이점

- 절차적 프로그래밍(Procedural Programming)
: 프로그램 설계 시 기능 구현을 위해 프로시저(함수)를 중점으로 사용하여 구조/로직을 설계하는 방법

- 객체지향(Object-Oriented Programming(OPP))
: 프로그램 설계 시 프로그램을 수많은 객체로 나누고 이 객체들의 상호작용으로 서술하는 방법

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

장점

  • 코드 재사용이 용이함
  • 클래스를 기능별로 분할하였기에 모듈화 에 용이함
  • 상속을 통해 높은 확장성을 가짐
  • 객체를 만들어두면 재사용할 수 있어서 유지보수성이 뛰어남

단점

  • 처리속도가 상대적으로 느림
  • 객체가 많아지면 저장공간을 많이 차지하게 됨
  • 설계시 많은 시간과 노력이 필요

📌객체지향의 특징

■ 캡슐화(Encapsulation)

: 클래스를 통해 변수와 함수를 하나의 단위로 묶는다

하나의 기능을 하는 요소들을 모두 한 캡슐에 모아둔 것 같다고 하여 캡슐화이다

같은 역할을 하는 변수, 함수들을 모아두었기에 의존성, 커플링이 줄어든다. 그로 인해 관리가 용이해진다

■ 정보은닉(Information Hiding)

: 프로그램의 세부 구현을 감추는 것

private 접근자를 통해 변수와 객체를 감추고, public 접근자로 선언된 메소드(함수) 로만 접근을 허용하여 접근을 제한하는 것
=> 의도하지 않은 접근을 제한하기 위해(=설계한 클래스를 다른 사람이, 혹은 본인이 잘못 쓰는것을 방지하기 위해)
ex) 다른 사람이 설계한 클래스의 변수에 직접 접근하여 값을 바꾸는 것을 막는다

이러면 코드 사용자는 프로그램의 내부 구현에 신경 쓸 필요 없이 메소드를 통해 원하는 기능을 호출하기만 하면 된다

또한, 객체들끼리 서로의 구현과 상태를 상관하지 않고 단지 사용하게만 함으로써 의존성을 낮추는 역할을 한다

■ 상속(Inheritance)

: 자식 클래스가 부모 클래스의 변수, 함수를 물려받는 것

자식 클래스는 자신만의 특성을 오버라이딩을 통해 디테일하게 구현한다

부모에서 추상적인 형태를 받고, 자식에서 세밀화하여 유연하게 코드를 작성할 수 있으며 생산성, 유지보수성이 올라간다

■ 추상화(Abstraction)

: 공통의 속성이나 기능을 묶어 이름을 붙이는 것

여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다

📃 내용 요약

  • 클래스 : 집단에 속하는 속성(attribute)과 행위(behaviour)를 변수와 메서드로 정의한 것
  • 객체 : 값을 저장할 변수와 작업을 수행할 메소드를 서로 연관된 것들끼리 묶어서 만든 것
  • 객체지향의 특징: 상속, 정보은닉, 캡슐화, 추상화

📚 참고출처
얌얌코딩 (게임 개발) : https://youtu.be/D-STWJ24Kcs?si=SchohSwV6LRH3nZv
기본기를 쌓는 정아마추어 코딩블로그 : https://jeong-pro.tistory.com/95
나무위키 : https://namu.wiki/w/객체%20%지향%20프로그래밍

profile
게임 개발자

0개의 댓글