- [ Dev/Book ][BOOK - 클린코드] Chapter 8. 경계2025-02-28 16:53:31시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. 때로는 패키지를 사고, 때로는 오픈 소스를 사용하거나 사내에 다른 팀이 제공하는 컴포넌트를 사용한다. 어떤 식으로든 이 외부 코드를 우리 코드에 깔끔하게 통합해야만 한다.이 장에서는 소프트웨어의 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다. 외부 코드 사용하기항상 인터페이스 제공자와 인터페이스 사용자 사이에는 특유의 긴장감이 존재한다. 패키지, 프레임워크 제공자는 적용성을 최대한 넓히려고 애를 쓴다. 그래야 더 많은 고객이 구매하고 사용하니까. 하지만 이런 긴장감으로 인해 시스템 경계에서 문제가 생길 소지가 많다.한 예로, java.util.Map을 살펴보면 맵(Map)은 굉장히 다양한 인터페이스로 수많은 기능을 제공해 유용하지만 그만..
- [ Dev/Book ][BOOK - 클린코드] Chapter 7. 오류 처리2025-02-24 23:08:24깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 상당수 코드 기반은 전적으로 오류 처리 코드에 좌우된다. '좌우된다'는 표현은 여기저기 흩어진 오류 처리 코드 때문에 실제 코드가 하는 일을 파악하기가 힘들다는 의미이다.오류 처리는 중요하지만, 오류 처리로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 불리긴 어렵다. 이 장에서는 깨끗하고 튼튼한 코드에 다가가는 단계로 오류를 처리하는 기법과 고려사항을 소개한다. 오류 코드보다 예외를 사용하라❌ 잘못된 방법) - 오류 플래그를 설정하거나 호출자에게 오류 코드를 반환하는 방법public class DeviceController { ... DeviceHandle handle = getHandle(DEV1); if (handle !=..
- [ 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)가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면 코드를 이해하기도 쉬워진다. 한 가지만 해라!함수는 한 가지를 잘 해야 한다. 하지만 그 '한 가지'가 무엇인지 알기 어렵지만 다음과 같은 조건으로 판단할 수 있다.지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.또 다른 판단 방법으..