OOP 핫한 주제이다. 정말 많은 사람들이 얘기하는 키워드이다.
OOP에대해서 공부를 해보았다. 해보니깐 OOP는 함수형 프로그래밍과 반대되는 개념이 아니라 , 그냥 다른 개념이었다.
특징으로 다형성, 상속등 여러가지가 있지만 그건 제쳐두고 이글에선 OOP의 핵심 개념과 철학에 좀더 집중해보려고한다.
기본적으로는 Alan kay라는 사람에 의해 만들어진 개념이다. Alan은 생물학자였다. 그래서 생물학을 기반으로 OOP를 만들었다.
생물은 각기 다른 세포가 장기를 이루고 장기는 생물을 이룬다. 그리고 각 장기는 서로 유기적으로 동작하지만 독립적이기도 하다. 이게 OOP의 핵심개념과 맞물린다.
시계처럼 모든 부품이 긴밀하게 맞물려있어서 하나만 고장나도 전체가 고장나는 것과는 다르다.
그저 다른 데이터와 다른 메소드와 어떤 메세지를 주고받고 소통하는지가 OOP의 핵심이다.
그럼 OOP와 함수형 프로그램밍(FP)의 차이점은 뭘까?
FP은 함수를 이용해서 데이터의 흐름을 파이프라인을 통해 변형해나가고 최종 데이터를 출력한다. 공장안에 조립라인을 통해서 자동차가 점점 완성되어가는 것 처럼 말이다. 그러나 OOP는 데이터를 보관하기도 하고 다른곳으로 넘겨서 같이 소통하면서 처리하기도 한다. 즉, 다시말하지만, '상호 소통' 에 조금 더 중점을 두면 될 것 같다.
각 객체안에는 외부에서 들어온 메세지를 처리할 복잡성이 숨겨져있다. 그 안에 또다른 복잡한 객체들이 외부에서 들어온 메세지를 처리하고 필요하다면 '적합한' 메세지를 다시 보낸다. 그 적합한 메세지는 내부의 복잡성에 의해서 처리된것이다.
이처럼 OOP는 생명과 같이 유기적이고 변화에 신속하게 대처가 가능한 개념이다.
출처:
1. https://www.youtube.com/watch?v=TbP2B1ijWr8&t=1367s
: 다른 객체와의 상호작용을 먼저 생각하라! 어떤 방식으로 상호작용하는지를 하나씩 나열하다보면 관통하는 것 특징이 있을것이다. 이 특징이 역할이다. 예를들어보자, 어떤 사람은 다른 구성원들이 집안에서 잘 생활할 수 있도록 요리하고 빨래하고 청소한다. 그리고 그 일을하는데 돈이 필요하면 돈을 요구하기도 한다.
그럼 이 사람은 가정주부이거나 하인일 것이다. 그럼 이 사람의 역할이 명확해진다.
그러고서 그 객체안에 들어갈 멤버변수, 메소드를 인터페이스에 추상화 시키는게 좋다.(그 인터페이스를 모델로 하여 다른 형태의 가정주부가 탄생할 수 있으니 인터페이스로 추상화시키고 소통하자)
객체지향의 품질은 각 객체의 고도화된 기능에 있는것이 아니라 객체간의 원활한 소통에 있다. 객체끼리 서로 예상하는 바대로 움직이길 기대하면 그에 맞는 값을 요구하거나 전달할때 문제없이 돌아가고 결국 전체의 궁극적인 이익을 만들어내는것이다.