profile
자기주도형 개발자

Item 53 - 가변인수는 신중히 사용하라

가변인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다.가변인수 메서드를 호출하면 인수의 개수와 길이가 같은 배열을 생성하고, 인수들을 배열에 저장 후 가변인수 메서드에 전달한다.간단한 예를 살펴보자. 파라미터로 몇개가 전달되든 각 합을 모두 더해 retur

27분 전
·
0개의 댓글

Item 51 - 메서드 시그니처를 신중히 설계하라

이번 아이템에는 개별 아이템으로 두기 애매한 API 설계 요령들을 모아놓았다.항상 표준 명명 규칙을 따라야 한다. 이 규칙은 아이템 68 에서 다룬다.최우선적으로 생각해야 할 것은 같은 패키지에 속한 다른 메서드들과 일관되게 짓는것이다.그다음은 개발자들 사이에서 널리

약 20시간 전
·
0개의 댓글
post-thumbnail

Item 49 - 매개변수가 유효한지 검사하라

매개변수는 메서드 몸체가 시작되기 전에 검사해야 한다. 왜일까?이유는 오류가 발생한 즉시 잡지 못한다면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생지점을 찾기 어려워진다. 몇가지 예를 살펴보자메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다.

2일 전
·
0개의 댓글

Item 48 - 스트림 병렬화는 주의해서 적용하라

자바8부터 parallel()만 한번 호출하면 파이프라인을 병렬 실행할 수 있는 스트림을 지원한다.메르센 소수를 생성하는 프로그램이다. 총 12.5초만에 완료되는데 여기서 parallel()을 호출해서 시간을 줄이고자 한다면?하지만 아무것도 출력하지 못하고 프로그램이

3일 전
·
0개의 댓글

Item 47 - 반환 타입으로는 스트림보다 컬렉션이 낫다

스트림을 반환하는 API는, 반환값을 forEach문으로 반복하길 원하는 사람에게는 적절하지 않다.반대로 Iterable만 반환하는 API는, 반환값을 스트림 파이프라인에서 처리하려는 사람에게는 적절하지 않다.사실 Stream 인터페이스는 Iterable 인터페이스가

4일 전
·
0개의 댓글

Item 46 - 스트림에서는 부작용 없는 함수를 사용하라 + Stream.Collectors

스트림 패러다임의 핵심은 계산을 일련의 변환으로 재구성하는 부분이다.이 때 각 변환하는 단계는 가능하면 이전 단계의 결과를 받아 처리하는 순수 함수여야 한다.순수함수란? 오직 입력만이 결과에 영향을 주는 함수를 의미한다.순수함수는 다른 가변 상태를 참조하지 않고, 스스

5일 전
·
0개의 댓글

Item 45 - 스트림은 주의해서 사용해라

Stream에 대한 기본적인 내용은 링크에 정리했다.아나그램이란 철자를 구성하는 알파벳은 같은데 순서만 다른 단어를 의미한다.예로 bca , cba는 아나그램이다. 아나그램끼리는 같은 키를 공유한다. 키는 구성 철자를 알파벳순으로 정렬한 abc가 된다.위 코드는 사전

6일 전
·
0개의 댓글

Item 43 - 람다보다는 메서드 참조를 사용하라

함수 객체를 람다보다 더 간결하게 만드는 방법이 메서드 참조이다.merge 메서드 key가 존재하면 해당 key의 값에 연산하고존재하지 않는다면 key와 디폴트값(여기서는 1)을 매핑하여 넣는다.람다식을 보면 파라미터 부분은 하는일 없이 공간을 차지하고 있다.Integ

2022년 1월 10일
·
0개의 댓글

Item 42 - 익명클래스보다는 람다를 사용해라

함수형 인터페이스와 람다식자바8 이전에는 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스를 사용했다.이를 함수형 인터페이스라고 하며, 함수형 인터페이스의 인스턴스를 함수 객체라고 한다.자바8 이전에 함수객체를 만드는 주요 수단은 익명클래스였다.자바8 부터는

2022년 1월 9일
·
0개의 댓글

Item 25 - 톱레벨 클래스는 한 파일에 하나만 담아라

Main.javaUtensil.javaDessert.java위와 같이 두 클래스파일에 똑같은 클래스들이 정의되어 있는 경우에어느 클래스를 먼저 컴파일하냐에 따라 pancake, potpie가 출력된다.즉 동작이 달라지기 때문에 이와 같은 형태로 만들어서는 안된다.해결방

2022년 1월 8일
·
0개의 댓글

Item 24 - 멤버 클래스는 되도록 static으로 만들어라(이너 클래스)

내부 클래스는 클래스 안에 선언된 클래스를 말한다.내부 클래스를 감싸고 있는 클래스를 외부 클래스라고 한다. 두 클래스의 멤버들 간에 서로 쉽게 접근 가능하다.외부에 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.인스턴스 클래스, 스태틱 클래스, 지역 클

2022년 1월 7일
·
0개의 댓글

Item 23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라

태그 달린 클래스란 클래스의 필드 하나로 클래스의 타입을 나타내는 클래스를 말한다.말로 설명하면 이해가 잘 안가지만 코드를 보면 쉽게 이해할 수 있다. 여기서 shape 필드가 태그 필드가 된다.열거 타입 선언, 태그 필드, switch문 등 쓸데없는 코드가 많다.

2022년 1월 6일
·
0개의 댓글
post-thumbnail

Spring AOP를 활용해 로깅하기

이론적으로 학습한 프록시, Spring AOP를 프로젝트에 적용해보자.homeController UserAspect Aspect 클래스를 만들고 빈으로 등록한다.@Around 어노테이션으로 포인트 컷을 정의했다. \- 접근제어자 → 생략 \- 반환 타입

2022년 1월 5일
·
0개의 댓글
post-thumbnail

[Spring] AOP 6. Spring AOP 주의점과 프록시의 한계

스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출한다면 당연히 AOP는 적용되지 않는다.AOP를 적용하면 스프링은 대상 객체 대신에 프

2022년 1월 4일
·
0개의 댓글

[Spring] AOP 5. Spring AOP 활용

스프링 AOP를 구현하는 일반적인 방법은 @Aspect를 사용하는 방법이다.해당 클래스는 빈으로 등록되어야 한다.@Aspect어노테이션 기반 프록시를 적용할 때 클래스에 붙여주면 된다.@Around값에 포인트컷 표현식을 넣는다.@Around가 붙은 메서드는 Advice

2022년 1월 4일
·
0개의 댓글
post-thumbnail

[Spring] AOP 4. Spring AOP 이론

해당 객체가 제공하는 고유 기능이다. 예로 OrderService의 핵심 기능은 주문 로직이다.핵심 기능을 보조하기 위해 제공되는 기능이다. 예로 로그 추적, 트랜잭션 등이 있다.부가기능은 보통 단독으로 사용되지 않고 핵심 기능과 함께 사용된다. 주로 핵심 기능을 보조

2022년 1월 4일
·
0개의 댓글
post-thumbnail

[Spring] AOP 3. 용어 정리

어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다.스프링 AOP는 프록시 방식을 사용하므로 조인 포

2022년 1월 3일
·
0개의 댓글
post-thumbnail

[Spring] AOP 2. 동적 프록시와 스프링이 지원하는 프록시

구체적인 클래스 타입을 알지 못해도 해당 클래스의 메서드, 타입, 필드에 접근 가능하게 해주는 API리플렉션은 보통 프레임워크, 라이브러리에서 사용된다.프레임워크나 라이브러리를 만드는 입장에서는 사용자가 어떤 클래스를 만들지 모르기 때문에리플렉션을 사용한다. 대표적으로

2022년 1월 3일
·
0개의 댓글
post-thumbnail

[Spring] AOP 1. 프록시와 디자인 패턴

GOF 디자인 패턴에서는 템플릿 메서드 패턴을 "작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기합니다. 템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의할 수 있습니다." 라고 정의했다.템플릿 메

2022년 1월 3일
·
0개의 댓글

Item 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다.즉 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지 클라이언트에게 의미를 전달하는 것과 같다.예로 상수 인터페이스 라는 것이 있다.상수 인터페이스란 메서드

2022년 1월 2일
·
0개의 댓글