본문 바로가기

OOP/<오브젝트>, 조영호13

6장 퍼블릭 인터페이스 설계 6장 관련 이야기 나눈 내용 트레이드오프 상황을 보니 설계에 정답은 없다. 어렵다!! 끊임없이 수정하고 검증해봐야 한다. 앞에서 본 예제들은 이상적인 수정이었구나. 이번에 소개된 원칙들은 생각보다 적용하기 어려워보인다. 어떻게 활용할 수 있을까? 우선 책임주도설계나 리팩토링으로 코드를 이동시키고, 인터페이스가 이 원칙들을 위반하는지 확인하자. 이때 코드를 보고 원칙을 위반한 것 같다고 접근하더라도, 어떤 조치를 취할 것인지는 캡슐화, 응집도, 결합도를 따져야 한다. 그리고 어떤 결정을 내렸는지 기록으로 남겨두면 나중에 새로 온 사람이 보거나 설계를 개선할 때 활용할 수 있을 것 같다. 이름이 의도를 드러내도록 바꾸니 협력을 이해하는데 확실히 도움이 되었다. 협업을 한다면 네이밍 컨벤션을 사용해야할 것. .. 2024. 1. 18.
5장 책임 할당 GRASP 패턴 5장 관련 이야기 나눈 내용 리팩터링 이야기. 스프링을 처음 배우고 나서 만든 스프링 프로젝트의 코드를 열어보니 너무 더럽더라. 그래서 리팩터링을 시도했는데, 이미 코드가 많은 상태에서 개선하려고 하니 너무 강하게 결합되어서 조금만 고쳐도 컴파일 오류가 났다. 결국 코드를 새로 작성하는 것밖에는 답이 없겠다 싶었다. 너무 큰 작업이라고 생각해 지금도 미루고 안 하고 있다. ㅋㅋㅋㅋ 어쨌든 리팩토링은 코드가 조금 쌓였을 때 주기적으로 하는게 좋은 것 같다. (기술부채 상환이라고 하는 듯) 리액트 프로젝트 했을 때 코드를 혼자 쓰는거라 완전 Stateful(?)하게 의존성 높게 짰다. 후반에 시간이 모자라서 협업을 하게 됐는데 다른 사람에게 코드를 이해시키느라 시간이 더 오래 걸렸을 정도로 코드가 복잡했다... 2024. 1. 17.
4장 설계 품질과 트레이드오프 (캡슐화) 팀원들과 이야기 나눈 내용 처음 객체를 설계할 때부터 무엇부터 생각하는지에 따라 설계 결과가 완전히 달라지는 것이 신기하다. 첫 단추가 중요한 것 같다. 코드를 완전히 처음 작성하는게 아닌 이상 이렇게 이상적인 객체지향적 접근을 적용하기 어려워 보인다. 아직 경험이 부족하므로 이렇게 좋은 품질의 객체지향 설계를 하는 것은 어렵다고 생각한다. 그래도 4장에서 짚어보았던 것처럼, 캡슐화가 제대로 되지 않은 코드를 알아보는 것부터 연습해보는 것이 필요할 것 같다. 캡슐화가 제대로 되지 않은 코드가 있다면 어떤 문제가 발생할 수 있는지, 변경의 여파가 어디까지 커지는지 확인하는 것부터 연습해보자. ORM이 객체중심의 애플리케이션과 데이터 중심의 데이터베이스 패러다임 차이를 해결한다고 하는 점이 이해가 잘 안됐었.. 2024. 1. 17.
3장 협력, 책임, 역할 협력 기능 구현을 위해 수행하는 상호 작용 협력은 객체가 필요한 이유와 행동을 결정한다. 이 행동은 객체의 내부 상태를 결정한다. 캡슐화된 객체는 자신의 책임을 수행하던 중에 외부의 도움이 필요하면 메시지를 전송해 협력을 요청한다. 책임 협력에 참여하기 위해 객체가 수행하는 행동. 종류 : 아는 책임, 하는 책임 적절한 책임을 적절한 객체에 할당하는 것이 객체지향설계에 있어 가장 중요한 부분 책임주도설계와 같이 메시지가 객체를 선택하도록 하는 방식은 최소한의 인터페이스를 제공하며 무엇을 해야하는지에 집중할 수 있다. 메시지를 전송하는 것에 집중하므로 자연스럽게 캡슐화된 객체들의 협력을 얻을 수 있다. 협력, 책임, 역할 중 책임이 가장 중요하다. 협력은 어떤 행동이 필요한지 맥락을 제공하며, 역할은 책임.. 2024. 1. 17.
[콘솔과 테라폼 구현] 사용자 > 100 : EC2, DB 분리 단일 EC2를 사용하는 아키텍처의 문제점 단일 EC2를 사용하는 아키텍처의 문제점 SPOF, EC2에 장애 발생 시 비즈니스 연속성에 바로 영향을 미침 페일오버 없음 이중화 없음 → 한 바구니에 계란을 모두 담지 말자! 인스턴스 역할 분리하기 단일 EC2가 하나의 기능을 하도록 인스턴스 역할을 나눈다. 웹 서버용 EC2 인스턴스 DB용 EC2 인스턴스 혹은 AWS DB 관리 서비스 (운영 부담 덜함) 구현 사항 EC2에 웹서버와 PHP를 설치하고 워드 프레스를 실행한다. AWS RDS에 MySQL 엔진을 실행해 워드 프레스 애플리케이션의 백엔드로 사용한다. 콘솔 구현 자료 https://aws.amazon.com/ko/tutorials/deploy-wordpress-with-amazon-rds/modul.. 2023. 10. 22.
2장 객체지향 프로그래밍 2장에서 기억하고 싶은 것 객체지향이 강력한 이유 : 요구사항 분석부터 구현까지 도메인이라는 일관된 추상화 기법을 사용함 객체 지향의 본질 : 말 그대로 ‘객체’를 지향하는 것 객체지향 설계의 핵심 : 적절한 협력을 식별하고 협력에 필요한 역할을 정의한 후에 역할을 수행할 수 있는 적절한 객체에게 적절한 책임을 할당하는 것이다. 캡슐화 : 절차지향 접근법과 비교했을 때 객체지향 접근법의 차이는 객체를 자율적인 존재로 만드는 것이다. 그러기 위해서는 객체가 상태와 프로세스를 함께 가지면서 자신의 상태를 자기만 변경할 수 있어야 한다. 객체의 접근제어 : 객체의 캡슐화를 통해 상태를 변경할 수 있는 주체는 자신으로 제한했다. 객체들이 협력하는 과정에서 어떤 객체의 상태 변화를 기대한다면, 해당 객체에게 상태.. 2023. 4. 29.