객체지향프로그래밍의 몇가지 주요 개념들을 정리해보았습니다.
OOP; Object-Oriented Programming
전공 서적에 나오는 말을 빌리자면,
"현실 세계를 객체로 모델링하여 interactive 하게 구성한 프로그래밍의 paradigm" 이 되겠습니다.
현실 세계와 OOP 개념 아이디어를 매칭시키면 아래와 같습니다.
| 설계도 | 클래스(Class) |
| 실제 사물 | 객체(Object) |
| 행동 | 메서드(Method) |
| 속성 | 필드(Field) |
| 동작 방식 다양화 | 다형성 |
| 공통된 특성 물려받기 (like 종 분류계) | 상속 |
Object (객체) 는 데이터 기반의 어떠한 기능을 가진 독립적 단위를 뜻하며,
객체 간 메세지 전달 (or 메서드 호출 등...) 로 프로그램이 동작하는 것을 포함합니다.
OOP의 각 개념들은 유기적으로 연결돼있으며, 아래 같은 아이디어들의 기초가 됩니다.
https://bulletprooves.tistory.com/67
[OOP] SOLID 설계 원칙
Solid 해서 생각난 이야기에용SOLID that's so slippery?얼음이 미끄럽단 건 삼척동자도 압니다. 하지만, 왜?they say, in the case of ice, that when you stand on it.momentarily the pressure melts the ice a little bit (미끄덩)so yo
bulletprooves.tistory.com
https://bulletprooves.tistory.com/46
[OOP] Design Patterns ( GoF )
Object Oriented 프로그래밍에서 협업을 위해 설계를 할때,내가 작성한 코드, 다른 분께서 작성한 코드를 전달해줄 때 생기는 어려움을 극복하기 위해디자인 패턴이라는 일종의 의사소통 방법을 사
bulletprooves.tistory.com
OOP 의 몇가지 핵심
객체 지향을 실현하기 위해서 필요한 몇가지의 핵심 개념이 있습니다.
Abstraction (추상화)
복잡한 내부 요소들은 숨기며, 필요한 것들만 드러냅니다.
즉, 원리까지 알 필요는 없는 불필요한 정보는 감추면서, 어떤 (결과를 내뱉는)동작을 하는지 핵심 개념을 보여주는 것입니다.
Unity 를 예를 들면, Rigidbody 나 Animator 는 내부 구조없이 인터페이스만 사용합니다.
abstract class Human {
public abstract void Learn(); // 배움에는 끝이 없소이다...
}
Encapsulation (캡슐화)
외부에 내부 구현 노출을 제한하며, 데이터와 메서드 등을 하나로 묶는 작업입니다.
접근제어자 (public, private, protected) 로 구현 가능합니다.
class Player {
private int hp;
public void TakeDamage(int dmg) {
hp -= dmg;
}
}
Unity 에서는 노출을 제한하 되, 인스펙터에서 확인이 가능토록, [SerializeField] private 을 사용합니다,
Inheritance (상속)
기존에 있는 클래스를 기반으로 새로운 클래스를 만드는 것입니다.
코드 재사용과 구조화에 용이하며, 부모-자식 관계 형성과 'is-a' 관계 (Dog is-an Animal) 처럼이 가능합니다.
class Animal {
public void Breathe() { }
}
class Dog : Animal {
public void Bark() { }
}
Unity 에서는 MonoBehaviour 를 상속 하므로, Asset 내 모든 C# 스크립트가 엔진의 기능을 물려받습니다.
Polymorphism (다형성)
같은 메서드가 객체에 따라 다르게 동작하는 것을 말합니다.
Overriding 처럼 상속된 메서드를 재정의하거나, 인터페이스 구현으로 메서드의 다양한 방식을 구현합니다.
Animal animal = new Dog(); // Animal 타입이지만 Dog로 동작
animal.Bark(); // Dog 의 Bark 메서드 실행
예를 들어, IDamageable 인터페이스를 정의했다고 하고,
이를 구현한 옵젝트들이 동일한 메서드 (ex. TakeDamage(); ) 을 호출하는 형상을 떠올릴 수 있습니다.
Modularity (모듈화)
구현할 프로그램을 작은 단위로 분리화 하는 것을 말합니다.
모듈마다 독립적이면, 자기 완결성이 있다고 합니다.
// PlayerInput.cs, PlayerMovement.cs, PlayerAttack.cs 등을 모듈로 나눠서 관리
OOP 를 사용하게 되면, 유지보수(수정시 영향 범위를 최소화 해용), 코드 재사용성,
확장에 용이하다는 점과 Test, Debugging 이 객체 단위로 수월해지며,
무엇보다도 우리가 사는 현실 세계로부터 모델링 된다는 점에서 사람들에게 친숙한 구조가 됩니다.
그럼 오늘도 좋은 하루 되세용~ ૮₍ ˶˃ ⤙ ˂˶ ₎ა
'- CS > OOP' 카테고리의 다른 글
| [CS] DI Dependency Injection (2) | 2025.06.23 |
|---|---|
| [OOP] SOLID 설계 원칙 (2) | 2025.06.07 |
| [OOP] Design Patterns ( GoF ) (0) | 2025.05.26 |