생각

FP 그리고 OOP 에 대한 고찰

Yukart 2023. 2. 19. 20:38
반응형

함수형 프로그래밍(Functional Programming)

  • 함수형 프로그래밍이란, 프로그래밍의 여러가지 패러다임중 하나(OOP 같은거처럼)
  • 함수의 조합으로 작업을 수행하며, 중요한것은 이 작업이 이루어지는 동안 작업에 필요한 데이터와 상태는 변하지 않음

객체지향 프로그래밍(Object-Oriented Programming)

  • 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

 위 까지가 대충 검색하면 나오는 간단한 정의이고, 여기서 각각의 패러다임에 대한 세부적인 내용을 다루는것은 의미가 없기에 생략한다. 내가 이것에 대해 고찰을 시작하는 이유는 가끔 함수형 프로그래밍 찬양론에 대한 내 생각을 정리하기 위함이다.

 📌 아직 미성숙한 주니어 개발자의 포스팅입니다. 글에 많은 모순이 있다는 점 감안하시고 읽으실 분들은 읽어 주시면 감사하겠습니다.
 개발에 있어서 흔한 격언이 있는데, `은탄환은 없다` 이다. 비단 개발뿐만 아니라 인생을 살다보면 어떠한 케이스에 가장 적절한 솔루션이 있을지 몰라도 어느 케이스든 적용되는 절대적인 솔루션은 없다는 뜻이다. 백번 맞는 말이고 나는 항상 이를 염두에 두고서 기술을 바라보려 노력한다.

 실제로 검색해서 나오는 정보를 1차원적으로 읽기만 하다보면 대부분 맞는 말을 하고있다. 그대로 쭈욱 읽다보면 결국은 이 이론이 모두 맞는 말을 하고 있기 때문에 믿어야 한다는 결론이 나오기 쉽다.

 주의해야할 점은 저런 이론적인 글들에서는 실제 내가 처한 환경과 상황에 대한 전제가 없다는 점이다. 그 전제가 깔리는 순간 우리는 더 많은 것들을 체크해야하며 그로 인해 예외 케이스가 발생한다는 것이다.

 

 누군가 말했다. FP로 짜는게 진보된 방식이고, OOP는 구식이고 그렇기 때문에 FP를 지향해야 한다고 한 해 정도 회사를 다니며 들었던 말들, 각 종 유투브 채널 및 기술 공부를 위한 검색들에서 읽은 포스팅들에게서 적어도 나는 그렇게 느꼈다.

 

 이상하다. 아무 전제도 없다. 지금 내가 구현해야할 대상은 무엇인지. 어떤 특성을 가지고 있는지. 프로그램 완성 후 다가올 여러 리스크들의 대한 고려 등등이 빠져있다. 회사로 치자면 구성원들의 역량, 사용하고 있는 언어, 사용할 수 있는 시간적 여유 등에 대한 설명이 빠져있다는 것이다.

 

 먼저, 결론적으로 나는 패러다임들 중 OOP를 가장 좋아하고 인간의 지적 체계를 가장 잘 이해한 패러다임이라고 생각한다. 물론 함수형도 상황에 따라 그렇게 코드를 작성하는 것이 유리하다면 기꺼이 함수형으로 작성 할 것이다.

 

 두번째로 인간은 항상 무엇인가를 바라볼 때 객체 지향적으로 '인식' 한다고 생각한다. 그럼 인식이란 무엇일까?

 

 

인식이란 인체의 오감을 통해서 어떠한 물체를 구분해내는 능력이라고 할 수 있겠다. 가령 '철수'라는 사람이 있다고 가정하자. 그리고 이 '철수'와 저녁 약속이 있어서 어디선가 만나기로 했다고 가정하자.

 약속시간보다 일찍 나온 나는 '철수'가 오기만을 기다리고있다. '철수'가 어디로 오는지는 알고있기 때문에 '철수'가 오는 방향으로 나는 예의 주시 하고있는 상황이다. 멀리서 '철수'의 모습이 보이지만 너무 멀어서 '철수'인지는 확실하지 않다. 

 

 다만 우리는 여기서 이미 첫번째 판단을 내렸다는걸 알 수 있다. 바로 '사람'이긴 한데 '철수'인지는 모르겠다 라는 것

 여기서 사람인것은 확실하지만 '철수'인지를 모르겠다를 프로그래밍 적으로 해석하면 '사람'이라는 클래스인 것은 확실한데, 그 인스턴스인 '철수'인지를 모르겠다는 말과 치환 가능하게 되는 것이다.

 이미 저 가정을 시작하는 첫 문장부터가 그 객체지향적인 의미를 내포하고 있다.

  (가령 철수(Instance) 라는 사람(Class)이 있다고 가정하자. )

 

 이렇듯 늘 일상속에서 인간은 추상적인 무엇인가를 만들고 그걸 그룹화 하면서 편하게 살아왔다는 것이 유추가 되지 않는가? 나는 인간이라는 한계에서 벗어 날 수 없기 때문에 내가 편안하고 늘 사용하던 객체지향을 좋아한다. 그것이 문제가 되는가? 왜 구태여 우리가 진화해온 결과들을 부정하면서까지 그것을 추구해야하는가?


 트렌드도 좋지만 그것에 휩쓸려 어떤 편향적인 시각을 가지게 되는 것은 굉장히 위험한 일이다. 주위 사람에게 그것을 진리인양 전파를 하면 더더욱 위험하고, 거기서 더 반대되는 사람들을 공격하고 무시하고, 지적 우월감 같은것에 빠져 있다면 최악이다.

 

 함수형으로 프로그래밍 하는 것이 유리한 상황이 온다면 얼마든지 나는 기쁜 마음으로 함수형으로 프로그래밍할 것이다. 하지만 100% 함수형으로 프로그래밍을 해야한다는 상황이 내 인생에서 한번을 존재할까? 아직 잘 모르겠다. 상황에 따라 유연하게 대처할 수 있는 사람이 될 때까지 모든 수단과 방법을 공부할 뿐이다.

반응형