ggjae / Algorithm-CS

🎅 1일 1알고리즘
0 stars 0 forks source link

객체지향 vs 함수형 #36

Open ggjae opened 3 years ago

ggjae commented 3 years ago

객체지향 프로그래밍

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

캡슐화(Encapsulation), 정보은닉(Information Hiding), 추상화(Abstraction), 상속성(Inheritance), 동적바인딩(Dynamic Binding) 등의 특징을 가지고 있다.

장점으로는 코드 재사용이 용이하고, 유지보수가 쉽고 확장성이 좋다. 하지만 단점으로는 개발속도가 느리고, 추가적인 메모리와 연산에 대한 실행속도가 소요된다.

함수형 프로그래밍

side efffect가 없는 순수 함수와 동작의 결과를 강조하는 프로그래밍 패러다임 OOP와 비교하여 함수의 동작부가 간결해서, 코드 이해도와 가독성에 큰 장점을 가지고 있다.

순수함수란?

function func(a, b) {
          return a + b + c; // 외부의 요인(변수)에 따라 리턴값이 달라짐
}

function func(a, b) {
    b = 2; // 들어온 인자의 값이 직접 변경되어 리턴값이 달라짐
    return a + b;
}

값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다. 함수 내부에서 인자로 받은 값을 별도로 저장하거나 하지 않고, 간결한 과정으로 처리하고 매핑하는것이 주 목적이다.

내가 사용하는 게임프로그래밍의 C++이나 C#언어에서는 '객체지향 프로그래밍'을 적용하는 것이 좋다. 그 이유는 객체지향 프로그래밍의 특징 '추상화', '다형성'에 대한 특징때문이다.

쉽게 예시를 하나 들어보자. 나는 검과 방패를 사용하며, 다양한 아이템을 먹으며 동굴을 탐험하며 한 동굴씩 토벌해나가는 플레이어이다.

이 때, 다양한 아이템에는 검과 방패 아이템, 물약 아이템, 전리품 등 많고 많은 데이터 중 class Item()이라는 한 클래스로 해당 데이터들을 관리할 수 있고, 의미나 수행과정이 비슷하므로 추상화를 적용시키는것이 이상적이다.

또한, 부모로부터 상속받은 메소드가 자식클래스에서 재정의된 메소드로 덮어씌워지며 부모클래스와 동일한 작업 + 알파를 처리해야 하므로 다형성의 overriding 들을 사용하는것이 빈번하므로 다형성의 특징 또한 게임 프로그래밍에서 안성맞춤이라고 할 수 있다.