- [ Dev/JPA ][JPA] 5. 연관관계 매핑 & 주인2025-02-21 19:25:16연관관계가 필요한 이유객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.- 조영호(객체지향의 사실과 오해 저자) 연관관계의 필요성을 알아보기 위해 예제 시나리오를 가져왔다.다음은 객체와 데이터베이스 테이블 간의 관계를 도식화 한 그림이다. [예제 시나리오 - 참조 대신에 외래키를 필드로 그대로 사용하는 경우]회원과 팀이 있다.회원은 하나의 팀에만 소속될 수 있다.회원과 팀은 다대일 관계다. 위 그림은 객체를 테이블에 맞추어 모델링했다. 따라서 `Member` 클래스의 필드 `teamId`가 `MEMBER` 테이블의 외래키 역할을 하게 된다. 그림에도 표현되어 있듯이 객체는 사실상 어떤 연관관계도 가지고 있지 않은 상태다. 데이터를 저장할 수 있는 별개의 필드로만 정의되어 있을 뿐이다..
- [ Dev/JPA ][JPA] 4. 데이터베이스 스키마 자동 생성2025-02-14 19:54:26`hibernate.hbm2ddl.auto`는 JPA에서 Hibernate가 데이터베이스 스키마를 자동으로 생성하거나 업데이트하는 기능을 제어하는 설정이다. 설정 값에 따라 DDL(Data Definition Language)을 애플리케이션 실행 시점에 자동 생성할지 결정한다. 설정 값 목록옵션설명create기존 테이블 삭제 후 다시 생성(DROP -> CREATE)create-dropCREATE와 같으나 종료 시점에 테이블 DROP(CRATE -> DROP)update기존 테이블을 유지하며, 엔티티 클래스에 맞게 스키마를 자동으로 업데이트.(변경분만 반영)validate기존 스키마와 엔티티 클래스가 일치하는지 검증.변경은 하지 않음.none스키마 자동 생성/업데이트를 하지 않음. 운영 환경에서는 절대 ..
- [ Dev/Book ][BOOK - 클린코드] Chapter 6. 객체와 자료 구조2025-02-13 00:27:38변수를 비공개(private)로 정의하는 이유남들이 변수에 의존하지 않게 만들고 싶어서다. 자료 추상화구현을 감추려면 추상화가 필요하다.개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 🔹 예제 코드1// 구체적인 Point 클래스public class Point { public double x; public double y;}// 추상적인 Point 클래스public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta);} 🔹..
- [ Dev/Book ][BOOK - 클린코드] Chapter 5. 형식 맞추기2025-02-13 00:20:16프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적코드형식은 너무나 중요하다. 저자는 '돌아가는 코드' 보다 코드 형식이 중요하다고 한다.코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다.맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.유명한 7개의 프로젝트(Junit, Fitnesse, testNG, tam, Jdepend, Ant, Tomcat) 마다 평균 라인 수의 차이가 있긴 하지만, 500줄을 넘어가는..
- [ Dev/Book ][BOOK - 클린코드] Chapter 4. 주석 - 공사중🚧2025-02-13 00:13:33
- [ Dev/Book ][BOOK - 클린코드] Chapter 3. 함수2025-02-06 01:17:17프로그래밍 초창기에는 시스템을 루틴과 하위루틴으로 나누고 함수가 존재했다.현재까지 살아남은건 '함수'밖에 없다. 작게 만들어라!함수를 만드는 첫 번째 규칙은 '작게' 만드는 것이다. 블록과 들여쓰기if/else/while 문 등에 들어가는 블록은 한 줄이어야 한다.대개 거기서 함수를 호출한다. 그러면 바깥을 감싸는 함수(enclosing function)가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면 코드를 이해하기도 쉬워진다. 한 가지만 해라!함수는 한 가지를 잘 해야 한다. 하지만 그 '한 가지'가 무엇인지 알기 어렵지만 다음과 같은 조건으로 판단할 수 있다.지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.또 다른 판단 방법으..
- [ Dev/Book ][BOOK - 클린코드] Chapter 2. 의미 있는 이름 - 공사중🚧2025-02-06 01:12:32의도를 분명히 밝혀라변수나 함수 그리고 클래스 이름은 의도가 분명히 드러나 있어야 한다.주석이 필요하다면 의도를 분명히 드러내지 못했을 가능성이 크다. 🔹 예제 코드// 나쁜 예public List getThem() { List list1 = new ArrayList(); for (int[] x: theList) if (x[0] == 4) list1.add(x); return list1;}// 좋은 예public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (int[] cell: gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return..
- [ Dev/Book ][BOOK - 클린코드] Chapter 1. 깨끗한 코드2025-01-24 15:10:35코드는 존재하리라코드를 자동으로 생성하는 시대가 오더라도 프로그래머가 필요 없다는 말은 헛소리이다.요구사항을 모호하게 줘도 우리 의도를 정확히 꿰뚫어 프로그램을 완벽하게 실행하는 기계는 절대로 불가능한 기대이다.코드는 요구사항을 상세히 표현하는 수단이다.추상화도 불가능하다. 정확히 명시해야만 한다.기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업이 '프로그래밍'이다. 나쁜 코드나쁜 코드로 만들어진 서비스나 제품은 회사가 망할 정도의 타격을 입는다.우리 모두는 어떤 이유(바쁨, 마감 기한 등)로 인해 대충 짠 프로그램을 나중에 손 보겠다고 한다.하지만 르블랑의 법칙에 의해 나중은 결코 오지 않는다. 나쁜 코드로 치르는 대가나쁜 코드가 쌓일 수록 팀 생산성은 떨어지며 결국은 생산성이 제로에 수렴한다.생..