객체지향에 대해서 사실 예전에 쓴 글이 있긴 하다..
오늘은 세번째로 객체지향에 대해서 써보는거네?
그런데도 아직 명확히 아! 이게 객체지향이지! 라고 다가오진 않는다..
사실 이전에 썼던 것들을 확인해보니까 정말 객체지향이라는 개념에 대해서 자세하게 서술한 것은 아니었다.
단어 그 자체가 어떤 것을 의미하는지 생각해봤던거 같다.
오늘 조영호님 강의를 들은것을 바탕으로 한번 다시 생각해보자.
객체지향이란 뭘 말하나?
나는 뒤에 "프로그래밍"이라는 말이 일단 생략 됐다고 생각해서, 객체 지향 프로그래밍에 대해서 생각해보고 싶다.
객체 지향 프로그래밍은 동일한 개념선상에서 함수형 프로그래밍도 있고 절차 지향 프로그래밍같은 패러다임들 중 하나이다.
말그대로 객체를 지향한다는 건데, 현실에 있는 것을 코드로 옮길 때 현실에 있는 것들을 객체로 추상화해서 프로그래밍하는 방법론이라고 볼 수도 있고,
굳이 현실에서 가져오는게 아니라
어떤 하나의 어플리케이션을 만들기 위해서 필요한 컴포넌트나 혹은 기능들같이 개발자가 특정한 단위들을 객체로 추상화하는 것도 객체지향 프로그래밍이라고 할 수 있을거 같다.
예를 들어서, OOP 언어인 자바를 이용해서 게임을 만든다고해보자.
어떤 특정 캐릭터를 선택해서 전투를 하고 승리하는게 목표인 게임이라고 치자.
이것을 어떤 단위인지는 모르겠지만 떠오르는대로 묶어보자면,
게임, 캐릭터, 캐릭터스텟, 캐릭터스킬, 상점, 상점의아이템, 메인조작화면, ... 등등..될 수 있을 것이다.
여기서 자기만의 기준이 중요할거 같긴한데, 일단 넘어가보자..
여튼 저런 것들을 코드상에서 상태(객체의 속성들)와 행위(객체의 메서드들)를 가지는 객체로 추상화하고 이 객체들을 유기적으로 결합하는 것이 객체지향 프로그래밍이라고 생각한다.
객체 지향에서 중요한 것은 뭘까?
이 객체들을 만들고 유기적으로 결합하는 과정에서 역할과 책임이라는 단어가 중요해진다.
객체들은 한 목표를 위해서 각자 어떤 역할을 가지고 있고 자신만의 책임들을 가지고 있다.
이것들을 잘 설정해줘야 좋은(?) 객체지향이 된다.
그 과정에서 캡슐화, 상속, 다형성 등의 개념이 나오는거 같다.
(좀 더 공부해서 작성해봐야겠다..😅)