12
27

객체 지향 프로그램이란?

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

값을 저장할 변수와 수행할 메서드를 서로 연관된 것들끼리 묶어서 만들어진다.

 

객체 내부에는 자료형 필드와 함수가 함께 존재한다. 이렇게 되면 절차적 프로그래밍에서의 단점이었던 추상적이던 동작도 직관적으로 보여 코드의 가독성이 증가한다.

 

중복되는 코드 양을 줄여서, 유지보수가 용이하게 만들어주며 이러한 객체들을 조립해서 하나의 프로그래밍으로 만드는 것이 객체지향 프로그래밍이다.

 

객체지향 프로그램의 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

 

추상화 (Abstraction)

객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해 내는 작업.

정확하게 표현하기 힘든 것들을 중요한 부분이나 특징점으로 잡아 설명하는 것을 추상화한다고 한다.

 

프로그래밍에서 추상화는 클래스를 정의할 때 불필요한 부분들을 생략하고 객체의 속성 중 중요한 것에만 중점을 두어 개략화 하는 것이다.

 

객체들을 하나로 묶을 때, 공통적인 특징을 묶어서 이름을 붙이는 것이 추상화이다.

 

즉 새로운 객체를 만들 때, 클래스의 고유기능만 새로 만들고 공통된 기능은 상속을 통해서 이용이 가능하다.

 

상속 (Inheritance)

여러 개체들이 지닌 공통된 특성을 부각시켜 하나의 개넘이나 법칙으로 성립하는 과정.

 

예시로 BaseSkill 이라는 클래스가 있다. BaseSkill은 다른 공격 스킬의 기본 베이스가 되서 회복 스킬, 공격 스킬, 버프 스킬은 BaseSkill을 상속받아서 공통된 속성을 공유할 수 있다.

 

상속을 통해서 하위 클래스는 상위 클래스의 변수와 기능을 물려받아서, 재사용이 가능하다.

그리고 상속을 통해서 코드의 중복을 제거할 수 있다.

 

다형성 (Polymorphism)

같은 자료형에 여러 가지 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질.

 

객체도 상황에 따라 여러가지 형태를 가질 수 있다는 것이 핵심이다. 예시로 메서드 오버라이딩과 메서드 오버로딩이 있다.

 

메서드 오버라이딩

부모 클래스의 메서드를 자식 클래스에서 재정의해서 사용하는 것. 자식 클래스는 부모 클래스의 메서드를 재활용하면서, 독자적인 기능이 추가 가능하다.

Virtual, override <- 가상함수에 관련된 것.

 

메서드 오버로딩

같은 이름의 메서드를 다양한 매개변수 타입과 개수로 오버로딩하여 사용하는 것을 말한다. 오버로딩은 메서드 이름을 동일하게 유지하면서도, 다양한 상황에서 유연하게 대응할 수 있는 방법을 제공.

 

예시로 합을 표현해야되는 함수에서 int, double, float 다양한 변수 타입을 고려해야된다면 오버로딩으로 매개변수 타입에 따라 다르게 동작하게 코딩할 수 있다.

 

하지만 무분별한 오버로딩은 코드의 동작을 이해하는데 어려움을 주기에 적절하게 사용해야된다.

 

캡슐화 (Encapsultaition)

객체지향에서의 캡슐화는 데이터와 메서드를 하나의 단위로 묶어, 외부에서 접근하지 못하도록 보호하는 개념이다.

 

캡슐화를 왜 해야되는가?

  • 데이터 보호 (외부로부터 클래스에 정의된 속성과 기능들을 보호)
  • 데이터 은닉 (내부의 동작을 감추고 외부에는 필요한 부분만 노출)

캡슐화가 중요한 이유는 불안정한 부분과 안정적인 부분을 분리해서 변경의 영향을 통제할 수 있다.

 

public, private, protected 이렇게 세 가지의 접근지정자로 구분해서 사용한다.

 

public : 공개 멤버, 클래스 외부에도 접근이 가능하다.

private : 비공개 멤버, 클래스 내에서만 접근 가능하다.

protected : 상속관계 일 때 접근이 가능하다.

 

 

'코딩 > C++' 카테고리의 다른 글

메모리 관리  (0) 2025.01.02
Class  (1) 2024.12.26
동적 배열 할당  (1) 2024.12.23
06. 참조자_1  (1) 2022.07.14
05. 자료형 bool  (1) 2022.07.12
COMMENT