예외는 진짜 예외 상황에만 사용하라 예외는 오직 예외 상황에서만 써야한다. 절대 일상적인 제어 흐름용으로 사용해선 안 된다. try { int i = 0; while(true) { range[i++].climb(); } } catch (ArrayIndexOutOfBoundsException e) { } 위 코드는 무한루프를 돌다가 배열의 끝에 도달하게 되면 ArrayIndexOutOfBoundsException 이 발생하면 끝을 내버리는 코드다. 왜 예외를 써서 루프를 종료한 거지? 세 가지 잘못된 추론을 살펴볼 수 있다. 예외를 통한 명확한 검사가 빠를 것이다. 코드를 try-catch 블록 안에 넣으면 JVM이 적용할 수 있는 최적화가 제한된다. JVM은 배열에 접근할 때마다 경계를 넘지않는지 매번 ..
Exception Exception, Exception은 원하지 않거나 예기치 않은 이벤트로, 프로그램 런타임에 발생하여 프로그램 명령의 정상적인 흐름을 방해한다. Exception and Error Error : 오류 심각한 문제를 나타내므로, 응용 프로그램에서 try / catch 문을 사용하며 안 된다. Exception : Exception은 상태를 나타내므로, 응용 프로그램에서 try / catch 문을 사용해야 한다. 예외계층 모든 Exception과 Error의 계층은 기본 클래스인 Throwable 클래스의 하위 클래스이다. Exception은 프로그래머가 직접 예외 조건을 잡아야 한다. Ex. NullPointerException Error는 Java 런타임 시스템 ( JVM )에서 런타..
Java에서 어노테이션이란, Java에서 어노테이션은 JEE5부터 새롭게 추가된 요소이다. 어노테이션을 사용하는 이유는, 유효성 검사를 쉽게 할 수 있고 코드가 깔끔해진다. 하지만, 가장 큰 특징은 메타 데이터로 볼 수 있다. 메타 데이터 : 데이터를 위한 데이터로서, 데이터 대해서 설명을 한 데이터이다. Java에서 제공하는 어노테이션 종류 @Override 선언한 메소드가 오버라이드(재정의) 되었다는 것을 나타낸다. @Deprecated 해당 메소드 혹은 객체가 더 이상 사용되지 않음을 표시한 것이다. 만약 해당 메소드 혹은 객체를 사용할 경우 컴파일 경고를 발생시킨다. @SuppressWarnings 선언한 곳의 컴파일 경고를 무시하도록 한다. @SafeVerargs Java7 부터 지원하며, 제네..
오토박싱과 언박싱 Java에서는 int, double, long 등의 기본 자료형(primitive type)의 포장 클래스(wrapper class)가 있어서 기본형을 객체로 다루어야 할 경우 사용할 수 있다. 그림에서 살펴보듯이 생성자는 해당하는 기본형의 값을 줄수도 있고, 문자열 형태로도 줄 수 있다. 단, 문자열 형태로 줄 시 데이터 타입 형식에 맞춰야한다. 박싱과 언박싱 박싱과 언박싱 개념은 JDK 1.5버전 부터 추가되었고, JDK 1.5버전 밑에서는 컴파일러가 기본형과 참조형(int와 Integer)의 관게를 알지 못했다. 박싱(Boxing) : 기본형을 참조형으로 변환하는 것이다. int -> Integer 언박싱(Unboxing) : 참조형을 기본형으로 변환하는 것이다. Integer -..
Item 61. 박싱된 기본 타입보다는 기본 타입을 사용해라 JDK 1.5버전에서는 오토박싱과 오토언박싱 덕분에 두 타입을 크게 구분하지 않고 사용할 수 있다. 하지만 두 개의 차이는 명확하게 구분된다. 기본 타입과 박싱된 기본 타입의 차이 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 값 + 식별성이라는 속성을 갖는다. 다시 말하면, 값이 같은 박싱된 기본 타입의 인스턴스가 두 개 존재할 때, 이 두 개는 서로 다르다고 식별될 수 있다. 기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 유효하지 않은 값을 가질 수 있다. 즉, null을 가질 수 있다. 기본 타입이 박싱된 기본 타입보다 시간과 메모리 사용면에서 더 효율적이다. 이 세 가지 차이로 인해 주의하지 않고 사용하면 문제가 발생할 ..
스프링 AOP: @AOP Spring AOP 구성 SimpleEventService(Real Subject)가 Bean으로 등록된다 BeanPostProcessor(Bean을 가공할 수 있는 LifeCycle 인터페이스)를 구현한 AbstractAutoProxyCreator로 Real Subject Bean을 감싸는 Proxy Bean을 만든다. 해당 Proxy Bean을 Real Subject Bean 대신에 등록을 해준다. 즉, Spring Boot로 인해 Proxy Bean을 동적으로 만들어주고, 구현한 Aspect가 Proxy 역할을 하는 것이다. Aspect내에서는 해야할 일(Advice)들을 개발자 재량에 따라 구현하면 되는 것이다. 그럼 이제 Spring Boot에서 제공하는 Proxy 기반..
스프링 AOP: 프록시 기반 AOP 스프링 AOP 특징 프록시 기반의 AOP 구현체이다. 스프링 Bean에만 AOP를 적용할 수 있다. 모든 AOP의 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적이다. 프록시 패턴 Real Subject : 원래 해야할 일 Proxy : 원래 해야할 일을 참조 즉, Subject의 타입은 Proxy를 사용하고 Proxy는 Real Subject를 감싸서 실제 클라이언트의 요청을 처리하게 된다. 이렇게 하는 이유는? 접근 제어 혹은 유연한 부가 기능 추가 때문이다. 예제를 통해 살펴보자 EventService : Subject SimpleEventService : Real Subject..
스프링 AOP: 개념 소개 스프링 AOP란 AOP란, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 OOP를 더 잘하게끔 도와주는 것이다. 그림을 통해 살펴보자 그려진 선들은 각각의 Concems을 칭한다. Concems란, 비슷한 코드들을 말하는 데, 예를 들면 트랜잭션 처리나 로깅 처리 하는 것들을 일컬어 말하는 것이다. 비슷한 코드 즉, Concems들이 각각 클래스에 배치 되는데 이것들이 만약 수정이 필요하게 되면 우리는 각각의 클래스에 소스코드를 모두 수정해야하는 비효율적인 작업을 해야한다. 결과적으로 유지보수하는데 쉽지가 않다. 그래서 AOP는 이런 문제를 Aspect를 활용해서 해결한다. 즉, 흩어져있는 Concems를 한곳에 모으는 것이다. AOP가 Aspect를 활용 각 Con..
- Total
- Today
- Yesterday
- 이펙티브 자바
- package-private
- 스프링부트
- Effective Java
- 인프런
- 생성자
- java
- java8
- try catch finally
- 김영한
- @Lazy
- try with resources
- 복사 팩토리
- mustache
- springboot
- 팩토리 메소드 패턴
- 점층적 생성 패턴
- jdk버전
- ifPresent
- 연관관계
- effectivejava
- 빌더 패턴
- 정적팩터리메서드
- 빈 순환 참조
- 자바8
- 이펙티브자바
- JPA
- flatMap
- Spring
- junit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |