[이펙티브 자바] 표준 예외를 사용하라
코드를 재사용하는 것처럼 예외도 재사용하는 것이 좋다. 자바 라이브러리는 아래와 같이 충분한 수의 예외를 제공한다.
코드를 재사용하는 것처럼 예외도 재사용하는 것이 좋다. 자바 라이브러리는 아래와 같이 충분한 수의 예외를 제공한다.
프로그래머는 검사예외와 비검사예외 중 어느 것을 선택해야 할지 API 설계 및 분석을 잘 해야 한다.
클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있다. 매개변수와 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. 예컨대 Collections의 ‘알고리즘’ 메서드(binarySearch, sort 등)는 모두 제네릭이다.
JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. 만드는 방법에 대해 알아보자.
자바 8 전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었지만, 자바 8 이후에는 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드를 지원하기 시작했습니다. 디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은...
재정의 가능한 메서드의 문서화
상속은 코드를 재사용하는 강력한 수단이지만 항상 최선의 방법은 아니다. 잘못 사용하게 되면 오류를 범하기 쉽다. 여기에서 말하는 상속은 “클래스가 다른 클래스를 확장(extends)하는” 구현 상속을 말한다. 클래스가 인터페이스를 구현하거나 또는 인터페이스가 또 다른 인터페이...
불변 클래스란?
Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 이 메서드는 PhoneNumber@adbbd처럼 단순히 클래스이름@16진수로_표현한_해시코드를 반환할 뿐이다. toString의 일반 규약에 따르면, 간결하면서 사람이 ...
equals를 재정의한 클래스 모두에서 hashCode를 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 hashMap 또는 HashSet같은 컬렉션을 사용할 때 문제를 일으킬 것이다.
코드를 재사용하는 것처럼 예외도 재사용하는 것이 좋다. 자바 라이브러리는 아래와 같이 충분한 수의 예외를 제공한다.
프로그래머는 검사예외와 비검사예외 중 어느 것을 선택해야 할지 API 설계 및 분석을 잘 해야 한다.
클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있다. 매개변수와 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. 예컨대 Collections의 ‘알고리즘’ 메서드(binarySearch, sort 등)는 모두 제네릭이다.
JDK가 제공하는 제네릭 타입과 메서드를 사용하는 일은 일반적으로 쉬운 편이지만, 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. 만드는 방법에 대해 알아보자.
자바 8 전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었지만, 자바 8 이후에는 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드를 지원하기 시작했습니다. 디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은...
재정의 가능한 메서드의 문서화
상속은 코드를 재사용하는 강력한 수단이지만 항상 최선의 방법은 아니다. 잘못 사용하게 되면 오류를 범하기 쉽다. 여기에서 말하는 상속은 “클래스가 다른 클래스를 확장(extends)하는” 구현 상속을 말한다. 클래스가 인터페이스를 구현하거나 또는 인터페이스가 또 다른 인터페이...
불변 클래스란?
Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 이 메서드는 PhoneNumber@adbbd처럼 단순히 클래스이름@16진수로_표현한_해시코드를 반환할 뿐이다. toString의 일반 규약에 따르면, 간결하면서 사람이 ...
equals를 재정의한 클래스 모두에서 hashCode를 재정의해야 한다. 그렇지 않으면 hashCode 일반 규약을 어기게 되어 hashMap 또는 HashSet같은 컬렉션을 사용할 때 문제를 일으킬 것이다.
1. 트랜잭션과 락
1. 스프링 데이터 JPA 소개 스프링 데이터 JPA는 데이터 접근 개발할 때 구현 클래스 없이 인터페이만 작성해도 개발을 완료할 수 있게 도와준다.
지연로딩 FetchType.LAZY
방향 : [단뱡향, 양방향] 단방향 : 회원 -> 팀 또는 팀 -> 회원 둘 중 한쪽만 참조하는 것 양방향: 회원 -> 팀, 팀 -> 회원 양쪽 모두 참조하는 것 다중성 : [N:1, 1:N, 1:1, N:...
스프링은 단순히 Ioc/DI를 편하게 적용하도록 돕는 단계를 넘어서 엔터프라이즈 애플리케이션 개발의 전 영역에 걸쳐 다양한 종류의 기술에 관여한다.
1. ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기능이 있다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
레벨 업그레이드 작업 중 에러가 발생하여 일부 유저만 수정되었다면 어떻게 처리해야할까?
비즈니스 로직 구현 시 엔터티 레벨과 서비스 레벨의 고려사항에 대하여 설명한다
스프링은 단순히 Ioc/DI를 편하게 적용하도록 돕는 단계를 넘어서 엔터프라이즈 애플리케이션 개발의 전 영역에 걸쳐 다양한 종류의 기술에 관여한다.
1. ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기능이 있다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
레벨 업그레이드 작업 중 에러가 발생하여 일부 유저만 수정되었다면 어떻게 처리해야할까?
비즈니스 로직 구현 시 엔터티 레벨과 서비스 레벨의 고려사항에 대하여 설명한다
1장. 코틀린이란 무엇이며, 왜 필요한가? 코틀린 언어의 특징 1) 간결함 _보일러 플레이트(boilerplate)_를 제거해야 한다. 2) 안전함 _Null Pointer_를 안전하게 다루는 방법을 제공한다. -> Nullable (Optional) 3) ...
코틀린 문법 정리
6. 실행 가능한 클래스 만들기
7장에서는 영역함수 let, run, apply, also에 대해 설명한다. 1. apply로 객체 생성 후에 초기화 객체를 사용하기 전에 생성자 인자만으로는 할 수 없는 초기화 작업이 피요할 땐 apply 함수를 사용한다. // apply 함수는 this를 인자로 전달하고 thi...
1. 코틀린에서 널 허용 타입 사용하기 널 허용(nullable) 타입은 안전 호출 연산자(?)나 엘비스 연산자(?:)와 결합해서 사용한다. // Person 클래스 class Person(val first: String, val middel: String?, val last...
프로그래머스의 코딩테스트 고득점 Kit의 DFS/BFS유형 문제들 중 Level 2 ‘타겟넘버’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 정렬유형 문제들 중 Level 2 ‘H-Index’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 3 ‘베스트앨범’을 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 2 ‘위장’을 풀어보았습니다.
1. 트랜잭션과 락
1. 스프링 데이터 JPA 소개 스프링 데이터 JPA는 데이터 접근 개발할 때 구현 클래스 없이 인터페이만 작성해도 개발을 완료할 수 있게 도와준다.
지연로딩 FetchType.LAZY
레벨 업그레이드 작업 중 에러가 발생하여 일부 유저만 수정되었다면 어떻게 처리해야할까?
비즈니스 로직 구현 시 엔터티 레벨과 서비스 레벨의 고려사항에 대하여 설명한다
1. ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기능이 있다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
1. ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기능이 있다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
1. ProxyFactoryBean 자바 JDK에서 제공하는 다이나믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기능이 있다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다.
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 3 ‘베스트앨범’을 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 2 ‘위장’을 풀어보았습니다.
이 글은 “카프카, 데이터 플랫폼의 최강자” 책 내용을 정리한 글입니다.
이 글은 “카프카, 데이터 플랫폼의 최강자” 책 내용을 정리한 글입니다.
비즈니스 로직 구현 시 엔터티 레벨과 서비스 레벨의 고려사항에 대하여 설명한다
레벨 업그레이드 작업 중 에러가 발생하여 일부 유저만 수정되었다면 어떻게 처리해야할까?
레벨 업그레이드 작업 중 에러가 발생하여 일부 유저만 수정되었다면 어떻게 처리해야할까?
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
트랜잭션 경계설정 코드를 비즈니스 로직 코드에서 분리해낼 때 적용했던 기법을 다시 검토해보자. 트랜잭션 기능은 사용자 관리 비즈니스 로직과는 성격이 다르기 때문에 아예 그 적용 사실 자체를 밖으로 분리할 수 있다. 아래 그림과 같이 부가기능 전부를 핵심코드가 담긴 클래스에서 독립...
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 2 ‘위장’을 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 해시유형 문제들 중 Level 3 ‘베스트앨범’을 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 정렬유형 문제들 중 Level 2 ‘H-Index’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 정렬유형 문제들 중 Level 2 ‘H-Index’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 DFS/BFS유형 문제들 중 Level 2 ‘타겟넘버’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 DFS/BFS유형 문제들 중 Level 2 ‘타겟넘버’를 풀어보았습니다.
프로그래머스의 코딩테스트 고득점 Kit의 DFS/BFS유형 문제들 중 Level 2 ‘타겟넘버’를 풀어보았습니다.
방향 : [단뱡향, 양방향] 단방향 : 회원 -> 팀 또는 팀 -> 회원 둘 중 한쪽만 참조하는 것 양방향: 회원 -> 팀, 팀 -> 회원 양쪽 모두 참조하는 것 다중성 : [N:1, 1:N, 1:1, N:...
지연로딩 FetchType.LAZY
지연로딩 FetchType.LAZY