본문 바로가기

전체 글

(150)
[자바 ORM 표준 JPA 프로그래밍] 5. 연관관계 매핑 기초 keyword방향(Direction): 단방향, 양방향다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M)연관관계의 주인(Owner):  객체의 양방향 관계에서 주인 설정이 필요 엔티티끼리 연관관계가 없을 경우 무엇이 문제일까?예) Team과 Member는 다대일 관계일 경우를 살펴보자.// 연관관게가 없을 경우// member와 team을 저장시 : member에 team을 연결하는 대신, teamId를 세팅하여 객체 지향스럽지 않다.Team team = new Team();team.setTeamName("TeamA");em.persist(team);Member member = new Member();memeber.setUserName("member1"..
도메인 주도 설계 03. 도메인 복잡성 관리-04. 바운디드 컨텍스트 연동 03. 도메인 복잡성 관리유비쿼터스 언어의 비일관성업무 부서에 따라 동일한 언어를 다르게 쓴다. 어떻게 모델링할까?과거에 시도되었던 방법은 대표적으로 두가지가 있다.모든 상황을 대응할 수 있는 복잡한 단일 모델접두사를 붙여 사용하기 (예. 마케팅 리드, 영업 리드)실제 대화에서는 아무도 접두사를 붙여 부르지 않는다.해결책: 바운디드 컨텍스트(Bounded Context)영업이라는 바운디드 컨텍스트와 마케팅이라는 바운디드 컨텍스트를 도출할 수 있다.하나의 바운디드 컨텍스트의 유비쿼터스 언어는 다른 바운디드 컨텍스트의 범위에는 완전히 관련이 없다. 유비쿼터스 언어의 용어, 원칙, 비즈니스 규칙은 해당 바운디드 컨텍스트 내에서만 유의미하다.바운디드 컨텍스트의 범위큰 유비쿼터스 언어를 관리하기 쉬운 작은 도메인..
[도메인 주도 설계 요약] 01. 비즈니스 도메인 분석하기-02. 도메인 지식 찾아내기 Intro도메인 주도 설계 방법론 (Domain-Driven-Design, DDD)이란전략적 설계와 전술적 설계로 나뉜다.전략적 설계무엇(어떤 소프트웨어)을 만드는지, 왜 그 소프트웨어를 만드는지에 대한 해답을 찾기전술적 설계어떻게 그 소프트웨어를 만드는지에 대한 해답을 찾기01. 비즈니스 도메인 분석하기핵심 키워드핵심 하위도메인지원 하위 도메인일반 하위 도메인도메인을 이해해야 하는 이유효과적인 솔루션을 설계하고 구축하기 위해서는 그것의 바탕이 되는 문제를 이해해야한다. 비즈니스 도메인이란회사가 고객에게 제공하는 서비스. 기업의 주요 활동 영역예. 스타벅스 - 커피기업은 여러가지 비즈니스 도메인을 운영할 수 있다. 예. 아마존 - 물건 판매, 클라우드 서비스회사는 비즈니스 도메인을 자주 변경할 수 있다...
[이펙티브자바]77-81 아이템 77. 예외를 무시하지 말라. 1. API 설계자가 메서드 선언에 예외를 명시하는 까닭 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. // catch 후 아무것도 하지 않는 코드 try { ... } catch (SomeException e) { } catch 블록을 비워두면 예외가 존재할 이유가 없다. 2. 예외를 무시하기로했다면? catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고, 예외 변수의 이름도 ignored로 바꿔놓자. 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라. synchronized 키워드 메서드나 블록을 한 번에 한 스레드씩 수행하도록 보장 동기화 - (1)배타적 실행 (2)스레드 사이의 안정적인 통신 보장 - 쓰기와 읽기 모두를 동기화하여..
[이펙티브자바]ch67-ch71 67. 최적화는 신중히 하라 성능을 제한하는 설계를 피하라. 외부 시스템과의 소통방식 (API, 네트워크 프롵토콜, 데이터 포맷등)을 신중히 설계하라. API를 설계할 때 성능에 주는 영향을 고려하라 - public 타입은 가변으로 만들지 말자. (방어적 복사를 매번 하도록 유발) - 가능한 상속 대신 컴포지션을 사용하자. (나쁜 성능의 부모객체를 물려받는 것 방지) - 구현 대신 이넡페이스를 사용하자. (더 빠른 구현체로 대체할 경우 대비) 최적화 전후로 성능을 측정하자. 도구 예시 : jmh, 프로파일링 도구 68. 일반적으로 통용되는 명명 규칙을 따르라. 기본 문법 패키지와 모듈 : 각 요소를 점으로 구분. 풀네임을 사용하자 Camel case 권장 상수는 대문자와 _의 조합으로 사용하기. 복수형 ..
[오브젝트] 3장 요약 3장. 역할. 책임, 협력 3.1 2장 리뷰 객체 지향 프로그램의 요소 : 클래스, 추상 클래스, 인터페이스 다형성 : 지연바인딩을 통해 구현 : 상속 / 합성 사용 : 유연성을 위해 합성이 권장된다. 3.2 3장 핵심 키워드 역할(role), 책임(responsibility), 협력(collaboration) - 협력 : 객체간의 상호작용 - 책임: 두 객체가 협업을 하는 과정에서 각자 맡은 일 - 역할: 한 객체가 맡은 책임의 집합 3.3 협력 정의 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용 메시지 전송(message sending) vs 메서드 (method) - screening은 movie에게 가격 계산을 "요청"한다. (메시지 전송) - movie는 요청받은 일을 수행하기 ..
[이펙티브 자바] 아이템 57~61 아이템 57. 지역변수의 범위를 최소화하라 - 가장 처음에 쓰일 때 선언한다 - 선언과 동시에 초기화한다. - for 문을 사용시, 인덱스가 반드시 필요한 경우가 아니라면 for-each로 대체하여, 잠재적인 버그를 수정하자. (코드 57-2 관련) 아이템 58. 전통적인 for문보다는 for-each문을 사용하라. - 반복자(iterator())나 인덱스(i)가 필요하지 않다면 for-each로 대체하자. - for-each로 대체할 수 없는 경우 1) 컬렉션을 순회하면서 선택된 원소를 지워야하는 경우: 반복자의 remove 메서드 호출 필요 -> JAVA 8부터 removeIF 사용하여 간소화 가능 (예시: https://kdhyo98.tistory.com/38) 2) 컬렉션 순회하면서 원소의 값 일..
[이펙티브자바]아이템 52-56 아이템 52 . 다중 정의는 신중히 사용하라 다중정의(overloading) - 메서드 호출을 컴파일 타임에 정한다. - 코드 52-1에서 Collections의 다형화를 사용하여 출력값을 다르게 지정했지만, 동작하지 않는 이유다. cf. 재정의(overriding): 메서드를 동적으로 선택한다. 다중정의로 인해, 메서드의 다형성이 존재한다고 프로그래머가 착각하기 쉽다. 따라서 안전하게 가기 위해 - 매개 변수 수가 같은 다중정의는 하지 말자. - 메서드명을 다르게 하자 (예. writeBoolean(boolean), writeInt(int) ...) - 형변환을 통해 정확한 다중정의 메서드가 선택되도록 유도하자. (코드 52-3) 아이템 53. 가변인수는 신중히 사용하라 최소한 필요한 가변 인수 갯수가..