본문 바로가기

기술도서/자바스프링 개발자를 위한 실용주의 프로그래밍11

자바스프링 개발자를 위한 실용주의 5. 순환참조 순환참조는 두개 이상의 객체나 컴포넌트가 서로를 참조하면서 의존관계에 싸이클이 생기는 것을 의미한다. S/W 설계에서 자주 볼 수 있는 안티패턴이다. 우리는 순환 참조가 안티 패턴인 것을 알고 있음에도 다음과 같은 코드를 짠다.JPA 양방향 매핑ex) Team ↔︎ MemberService Layer 간의 참조ex) TeamService ↔︎ MemberServiceSpring과 JPA를 사용하다 보면 흔히하는 실수이다. 순환참조의 문제점무한루프순환참조된 객체를 직렬화 하게 되면 무한루프에 빠진다.Member객체 안 Team 직렬화 -> Team안 Member직렬화 -> Member객체 안 Team 직렬화 -> ... 반복Json이 지원하는 어노테이션으로 해결 가.. 2024. 11. 9.
자바스프링 개발자를 위한 실용주의 4. SOLID 각 원칙은 소프트웨어의 유지보수성과 확장성을 높이는 것이다. 이를 판단하기 위한 세가지는 다음과 같다.- 영향범위- 의존성- 확장성 SOLID 소개1. 단일책임원칙단일 책임 원칙 목표단일 책임 원칙의 목표 클래스가 변경됐을 때 영향을 받는 액터가 하나여야 한다.클래스를 변경할 이유는 유일한 액터의 요구사항이 변경될 때로 제한되어야 합니다.책임에 대해 각자 의견이 다를 수 있다. 단일 책임을 정의하려면 시스템에 존재하는 엑터들을 이해해야 한다. 같은 업무임에도 불구하고 어떤 조직은 혼자서, 어떤 조직은 다수가 임한다. 2. 개방 폐쇄 원칙코드를 확장하고자 할 때 취할 수 있는 최고의 전략은 기존 코드를 아예 건드리지 않는 것이다.추상화 된 행동에 의존한다. 즉, 인터페이스에 의존한다면 신규 요구사항에 대해.. 2024. 11. 9.
자바스프링 개발자를 위한 실용주의 3. 행동 "자동차 만들어 주세요." 라는 요구사항을 받았다. 자연스레 데이터 중심으로 이어진다. 자동차에는 엔진이 있고, 프레임이 있고 등등.. 데이터 중심 사고로 빠지는 함정 중 하나이다. 하지만 객체를 구분 짓는 요인은 데이터가 아니라 행동이다.TDA(Tell, Don’t Ask)원칙을 따르자.데이터 중심의 사고보다는 행동중심의 사고를 해라// 데이터 중심class car{ private Engine engine; private Frame frame; private List wheels;}// 행동 중심class car{ public void drive() {} public void accelerate(float speed) ..}어떤 행동(drive, acceleate)을 할 수 있는지가 곧, .. 2024. 11. 9.
자바스프링 개발자를 위한 실용주의 2. 객체 종류 VO - 신뢰할 수 있고 예측 가능한 객체불변성 : 값은 변하지 않는다. 숫자 1은 영원히 숫자 1이다.값을 바꾸지 못하도록 보장.혹은 완전히 새로운 인스턴스로 반환동등성 : 값의 가치는 항상 같다. 1은 적혀있는 위치나 시간에 관계없이 항상 1이다.equals, hashCode를 오버라이딩 할 필요가 있음id를 포함하면 안됨.자가검증 : 검증할 고민 없이 그자체가 올바른 값이다. DTO - 데이터 전송간 객체데이터를 전송하는 본연의 임무를 다 하면 된다.getter/setter, public/private 사용유무와는 별개이다.@Data 어노테이션은 개발자가 데이터 중심의 사고를 하도록 한다. 행동 위주의 사고를 하는 객체지향과 멀어진다.DAO. 데이터 접근 객체도메인 로직과 DB연결 로직을 분리하기 .. 2024. 11. 9.
자바스프링 개발자를 위한 실용주의 1. 절차지향비교 순차지향위에서 아래로 단순하기 실행되는 코드절차지향Procedure(절차)는 과거엔 함수로 사용했다. 예를들어 오라클 프로시저 같은 것이다. 때문에 함수 지향 프로그램이라고 볼 수 있다. 함수간 호출이 절차적으로 진행되는 구조이다.순차지향과 크게 다르지 않다. 함수로 나누어둔 기능들을 연결시키는 것 뿐이다.객체지향역할과 책임을 갖는 능동적인 객체들이 서로 협력하는 것이다.객체는 실세계를 반영하는 패러다임이 아니다. 그보다는 자아를 가진 객체들이 서로 협력하는 방식으로 개발하는 것이다. 실세계에서는 음식 자체가 가격을 말해주지 않는다. 하지만 음식 클래스는 가격을 갖고 가격을 알려준다. 책임과 역할책임을 객체에 할당하는 것이 중요하다. 객체가 자신의 역할과 목적에 맞는 행동을 갖도록 설계해야 한다. 객체 .. 2024. 8. 11.