분류 전체보기 18

[오브젝트 - 코드로 이해하는 객체지향 설계] 4장. 설계 품질과 트레이드오프

(예제에 관한 내용은 빼고 내용 정리)객체지향 설계의 핵심은 역할, 책임, 협력이다.협력 - 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용책임 - 객체가 다른 객체와 협력하기 위해 수행하는 행동역할 - 대체 가능한 책임의 집합객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.객체지향 설계의 핵심이 책임책임을 할당하는 작업이 응집도와 결합도 같은 설계 품질과 연관됨1. 데이터 중심의 영화 예매 시스템객체지향 설계에서는 두 가지 방법을 이용해 시스템을 객체로 분할할 수 있다.상태를 분할의 축으로 삼는 방법책임을 분할의 축으로 삼는 방법시스템을 분할하기 위해서는 책임에 초점을 맞춰야한다. 객체의 상태는 구현에 속한..

개발서적 2025.05.13

[Java] 객체지향 설계의 5원칙 - SOLID

좋은 설계란 시스템에 새롤운 요구사항이나 변경사항이 있을 때, 영향을 받는 범위가 적은 구조를 말한다.SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지 보수 관리하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 프로젝트의 개발의 생산성을 높일 수 있다.SOLID는 특정 프로그래밍 언어 혹은 프레임워크를 위해 만든 원칙이 아니다.SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙을 말한다.SRP (Single Responsibility Principle): 단일 책임 원칙OCP (Open Closed Principle): 개방 폐쇄 원칙LSP (Listov Substitution Principle): 리스코프 치환 원칙ISP (Inte..

공부 2025.04.07

[오브젝트 - 코드로 이해하는 객체지향 설계] 3장. 역할, 책임, 협력

객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력이다.객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절한 책임을 할당하는 과정에서 드러난다. 클래스와 상속은 객체들의 책임과 협력이 어느 정도 자리를 잡은 후에 사용할 수 있는 구현 메커니즘일 뿐이다.협력영화 예매 시스템 돌아보기객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 어떤 하나의 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다.객체들은 요청의 흐름을 따라 자신에게 분배된 로직을 실행하면서 애플리케이션의 전체 기능을 완성한다.다양한 객체들이 영화 예매라는 기능을 구현하기 위해 메시지를 주고받으면서 상호작용한다는 점인데,객체들이 애플리케이션 기능을 구현하기 위해 수행하는 상호작용을 협력이라..

개발서적 2025.04.07

[Spring] 순환참조문제

필자도 백엔드 첫 프로젝트하면서 순환참조 문제를 겼었었다 ……. 그 당시에는 첫 프로젝트인데 기간은 촉박하고 다른 기술들도 처음 써보는 게 많다보니.. 공부해야할 것도 너무너무 많았고 ..결국 급한대로 @Lazy 애노테이션을 사용해서 임의로 해결 했지만, 나중에 근본적인 순환참조 고리를 끊어내기 위해 리팩토링으로 해결했었다. 설계 자체에 시간을 많이 투자해야된다는 건 알았지만 조급한 마음에 중요성을 간과하고 시작해서 그런 거 같다. 진짜 설계랑 흐름 정리가 제일 중요 !!!!늦었지만 어떤 현상인지 정리해보려고한다.순환 참조 문제란?A 클래스가 B 클래스의 Bean을 주입받고, B 클래스가 A 클래스의 Bean을 주입받는 상황처럼 서로 순환되어 참조할 경우 발생하는 문제.왜 발생하는걸까?먼저, 특정 클래스..

공부 2025.04.04

[Spring] spring의 의존성 주입 방법 4가지

(기본적인 내용이지만, 복습겸 정리 -!)우선, 스프링에서 의존성 주입(Dependency Injection, DI)은 크게 4가지 방법으로 구분된다.생성자 주입생성자를 통해서 의존 관계를 주입하는 방법생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.따라서 불변성을 가지는 의존성 주입에 적합하며, 반드시 필요한 의존관계에 사용된다.이때, 크게 private final + 생성자 방식과 @Autowired 기반 생성자방식으로 나눌 수 있다.private final@Servicepublic class MyService { private final MyRepository myRepository; public MyService(MyRepository myRepository) { ..

공부 2025.04.04

[Spring] POJO란? Hibernate와 Spring이 왜 POJO 친화적인가

POJO (Plain Old Java Object)”오래된 방식의 간단한 자바 객체”Getter, Setter와 같은 기본 기능만을 갖는 기본 객체를 의미.특정 기술에 종속되어 있는 상태로 개발하지 않는 개념을 위해 등장한 언어.종속성으로 인해 시스템 업그레이드, 모듈 교체와 같은 상황에서 많은 불편함이 있었기에 POJO라는 개념이 등장함.(여기서 특정 기술이라함은 framework를 의미)Spring은 POJO 개념을 잘 지킨 프레임워크이다.IoC, DI, AOP와 같은 개념들이 모두 결합력을 느슨하게 하여 의존성을 낮춤으로써 종속성이 낮아지는 현상이 발생.POJO에 가까운 개발이 가능하다!!특정 기술들이 종속성을 가지게 되면, 객체지향적인 설계가 힘들거나 불가능한 경우가 발생. 그렇다보니 코드의 유지..

공부 2025.04.03

[DDD] Aggregate란?

문득 DDD에 대해 제대로 알고있는 게 맞는가? 라는 의구심이 들어 공부를 하던 중 aggregate 개념도 함께 정리하고 싶어 정리를 해봤습니다.Aggregate(에그리거트)란?소프트웨어 개발에서 관련된 객체들의 집합을 의미보통 하나의 대상에 대해 여러 객체를 생성하여 각 객체들이 서로 상호작용하도록 구성할 때, 이를 하나의 애그리거트로 묶어서 처리하는 것이 일반적이다.보통 특정 비즈니스 로직을 수행하는데 필요한 객체들을 모아서 관리하게 된다.Aggregate 구현 방법구현하는 방법은 특정되어있지 않고 다양하다.일반적으로는 ‘객체 지향 프로그래밍에서 제공하는 클래스나 인터페이스를 이용하여 구현한다.’에그리거트를 구성하는 객체들은 해당 클래스나 인터페이스를 구현하도록 만들어지며, 이를 하나의 애그리거트..

공부 2025.04.01

[JPA] JPA의 N + 1 문제 정리

N + 1 문제연관 관계에서 발생하는 이슈연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n)만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상.현상 재현FetchType 정리예시로, 선생님과 학생의 관계를 표현해보려한다.하나의 선생님은 여러 명의 학생을 담당한다.한 명의 학생은 한 명의 선생님에게 소속된다.@Entity@Data@NoArgsConstructorpublic class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @OneToMany(mappedBy = "teac..

공부 2025.03.27

[JPA] FetchType 정리

FetchTypeJPA에서 엔티티를 조회할 때 연관된 ‘엔티티 조회 방법을 결정하는 전략’A와 B라는 엔티티가 존재한다고 했을때, 테이블 간의 관계에서 A엔티티를 조회하였을 경우 B엔티티를 함께 조회할 것인지 아니면 필요에 따라 조회할 것인지 결정하는 데 사용됨.지연 로딩의 관계에서는 A엔티티를 조회할 때 B엔티티는 조회하지 않고 B엔티티 데이터가 실제로 사용될 때 해당 데이터를 조회함.FetchType.EAGER (즉시로딩)엔티티를 조회하는 방법을 정의하는 전략 중 하나.테이블 간의 관계에서 A라는 엔티티를 조회할 때 연관된 B라는 엔티티도 함께 조회하는 방식한번의 쿼리로 필요한 모든 데이터를 가져올 수 있으나 필요하지 않은 데이터까지 조회되어 성능 이슈 발생 가능.연관된 엔티티를 실제로 사용할 때 조..

공부 2025.03.27

JDBC, JPQL, QueryDSL etc

JDBCJava Database Connectivity데이터베이스와의 연결과 쿼리 수행을 제공하는 Java의 API대표기능 3가지db와 같은 데이터 소스와 연결db에 쿼리 전송요청에 따른 db쿼리 결과 처리주로 쓰이는 JDBC API 클래스와 인터페이스java.sql.ConnectionConnection객체: Java 프로그램이 외부 데이터베이스 시스템과 연결될 때 사용됨.db와의 연결을 설정하고 유지하며, SQL 쿼리를 실행하거나 트랜잭션을 관리db연결 생성 및 종료, 커밋/롤백 등 트랜잭션 관리, Statement/PreparedStatement 등 객체 생성 기능 제공setAutoCommit(true) → default롤백처리가 필요하다면 false로 설정하고, 명시적으로 rollback() 또는 ..

공부 2025.03.27