-
객체 지향 설계 공부 방향성에 관해서(삽질일기)기타 2024. 4. 22. 13:54
(이 글은 말을 편하게 하겠습니다. 양해 부탁드립니다.- 의식의 흐름 주의)
처음 객체지향 설계를 공부할 때 진짜 아무것도 모를때..
단순히 oop라고 한다면?? 어!! 클래스 그리고 붕어빵 틀이 붕어빵을 찍어내서 계속 사용할 수 있다.
붕어빵틀이 클래스고 붕어빵은 인스턴스 이렇게 재사용 가능하게 하는게 객체지향
이렇게 생각하고 공부했다.
물론 틀린말은 아니다.
하지만 더 깊게 들어가보면 SOLID 원칙이라는 것이 있고 책임 협력 역할 메세지 라는 것이 있다.
이것은 무엇이고 왜 그렇게 중요하기에 계속 빠지지 않고 나오는 것일까?
먼저
S(srp): 단일 책임의 원칙 - 하나의 클래스는 하나의 책임만 가져야 한다.
O(ocp): 개방 폐쇠의 원칙 - 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다
L(lsp): 리스코프 치환 원칙 - 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
I(isp):인터페이스 분리의 원칙 - 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
P(dip): 의존관계 역전의 원칙 - 프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다
이 원칙을 계속 들어봤을 것이다.
하지만 필자가 멍청했는지...필자는 초창기 자바를 볼 때 계속 계속 여러 번 봐도봐도 이해가 도무지 가지 않았다.
뭐라는 거야? 인터페이스가 중요한 거 알겠고 추상화에 의존해야하는거 알겠는데 이걸로 어떻게 확장과 치환 개방 폐쇠 단일책임까지 연결된다는거지?
라는 생각을 했다.
만약 필자랑 같은 생각을 하시는 분이 있다면 조금이라도 시간을 줄이셨으면 하는 마음에서 다음 책을 추천한다.(바로 읽어보기를 추천합니다.)
https://www.yes24.com/Product/Goods/18249021
객체지향의 사실과 오해 - 예스24
『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝게도 많은 사람들이 객체지향의 본질을 오해하고 있다. 가장
www.yes24.com
이 책은 코딩을 보여주지 않는다. 다만 어떻게 객체를 바라보고 사용하는지에 대한 관점을 설명한다.
이 책은 언어를 따로 나누지 않기 때문에 어떤 언어든 객체지향이라는 것이 처음이다 라고 한다면 추천하는 책이다.
처음 이 책을 읽고 나는 관점을 완전히 다르게 할 수 있었다.
하지만 아직도 모르겠다.
그러면 대체 어떻게 이렇게 책임과 역할을 설계하는건데?
코드로 어떻게 만들어?
나는 그 다음 이 책을 읽었다.
https://www.yes24.com/Product/Goods/74219491
오브젝트 - 예스24
역할, 책임, 협력을 향해 객체지향적으로 프로그래밍하라!객체지향으로 향하는 첫걸음은 클래스가 아니라 객체를 바라보는 것에서부터 시작한다. 객체지향으로 향하는 두번째 걸음은 객체를
www.yes24.com
이 책은 자바로 설명되어 있다.
직접 영화관에 대한 설명을 하면서 영화관에서 각각 어떤 역할을 하는지 직접 설명하며 하나하나 차근차근 보여준다.
이 책을 읽다보니 나는 깨달음을 얻을 수 있었다.
객체지향을 더 쉽게 유연하게 사용하기 위해서 나온 것이 디자인패턴 이구나.
실제 디자인 패턴을 섞어쓰면 oop를 더 유연하게 작성이 가능하다.
디자인패턴은 아직은 공부중이기도 하고 적용은 또 다른 문제라 진짜 이 책이 너무 좋다.라고는 추천 할 책은 아직 정하지 못하겠다.
대신 블로그에 올릴 겸해서 작은 프로젝트 하나를 만들었다.(양심선언)
아이러브커피같은 게임을 기반으로 한 oop기반의 게임으로 매우 간단하다. 여기서 디자인패턴은 딱 1개 전략패턴이 사용되었다.
내가 처음 oop를 공부할 때 깃허브에서 oop프로젝트 무엇을 참고해야할지 전혀 모르겠었다.그래서 더 손이 안갔던 것이 생각이 나서 만든 프로젝트다.
만약 처음 oop를 공부하는 사람이 있다면 참고했으면 좋겠고 그 참고가 도움이 됬으면 좋겠다.
https://github.com/sjleeJ/coffeePole_OOP
GitHub - sjleeJ/coffeePole_OOP: 아이러브커피와 같은 커피게임을 OOP기반으로 작성한 프로그램입니다.
아이러브커피와 같은 커피게임을 OOP기반으로 작성한 프로그램입니다. Contribute to sjleeJ/coffeePole_OOP development by creating an account on GitHub.
github.com
*잘못된 개념이 있다면 피드백 부탁드립니다.
*oop github 소스에 관해서 pr 주신다면 감사히 받겠습니다.