인터페이스가 없는 경우 프록시는 어떻게 만드는지 알아보자. 이 때는 라이브러리가 필요하다. (CGlib) CGlib cglib cglib 3.3.0 @Test public void di() { MethodInterceptor handler = new MethodInterceptor() { MyBookService myBookService = new MyBookService(); @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { if(method.getName().equals("rent")) { System.out.println("aaaa")..
들어가기에 앞서 final과 static에 대해서 간략히 살펴보자 https://it-mesung.tistory.com/86?category=830540 [Java 기초] static static static은 컴파일러에 의해 .java에서 .class 파일로 로드될 시 우선적으로 method 영역(static, class영역이라고도 부름) 메모리에 할당된다. 이런 이유로, 객체가 heap영역 메모리에 올라가기 전에 호출해.. it-mesung.tistory.com https://it-mesung.tistory.com/85?category=830540 [Java 기초] final final final의 효과 클래스나 메소드 혹은 변수에 final 제어자가 붙을 수가 있는데 각각 다음과 같은 제한이 생긴다..
데몬 스레드 일반 스레드의 작업을 돕는 보조 스레드이다. 일반 스레드가 종료되면 데몬 스레드는 자동으로 종료된다. 이 점을 제외하고는 일반 스레드와 동일하다. 데몬 스레드의 예 가비지 컬렉터, 워드프로세서 자동 저장, 화면자동개신 데몬 스레드는 무한루프를 이용해 항시 대기하고 있다가 특정 조건에 만족하면 작업을 수행하고 다시 대기상태에 있는다. 데몬 스레드 관련 메소드 boolean isDaemon() //해당 스레드가 데몬 스레드인지 확인한다. void setDaemon(boolean on) //파라미터 값이 true이면 스레드를 데몬스레드로 변경한다. setDeamon 메소드는 반드시 start()를 호출하기 전에 실행되어야 한다. 호출 후 실행되면 IllegalTrheadStateException이..
static static은 컴파일러에 의해 .java에서 .class 파일로 로드될 시 우선적으로 method 영역(static, class영역이라고도 부름) 메모리에 할당된다. 이런 이유로, 객체가 heap영역 메모리에 올라가기 전에 호출해서 사용할 수 있는 것이다. static 적용 지점 블록 변수 메소드 중첩 클래스 static block 해당 객체가 new를 통해 인스턴스화 될 때 최초 한번만 호출한다. public class MyStaticClass { static int a = 10; static int b; //static block static { System.out.println("static block"); b = a * 4; } public MyStaticClass() { System..
final final의 효과 클래스나 메소드 혹은 변수에 final 제어자가 붙을 수가 있는데 각각 다음과 같은 제한이 생긴다. final 클래스 다른 클래스에서 상속을 하지 못 한다. 클래스가 final일 시 해당 클래스의 내부 메소드도 final로 선언되나, 변수의 경우는 final 개념을 갖지 않는다. final 메소드 상속 받은 클래스에서 오버라이딩을 못한다. final 변수(인스턴스 변수 == 전역 변수) 선언과 동시에 초기화하거나 생성자 내에서 값을 지정할 수 있다. 이 또한 그 이후에는 수정이 불가하다. final 변수(지역 변수) 선언과 동시에 초기화하거나 메소드를 실행 시 값을 지정할 수 있다. 단, 그 이후에는 수정이 불가하다. static final 변수(클래스 변수) 선언과 동시에 ..
public static void 선언 이유 Java의 Main Java는 Main에서 시작해서 Main에서 끝난다 Main은 여러 클래스와 연결될 수 있는 중심부의 역할이다. 매인의 public Main을 실행하는데 있어, Main에서는 다른 클래스의 메소드 등을 호출해야하는데, 막상 Main 자체가 다른 곳에서 접근을 허용하지 않는다면 문제가 생길 수 밖에 없어 Main의 접근제한자를 public으로 선언한 것이다. 메인의 static static은 프로그램이 시작하면 따로 인스턴스화 하지 않아도 method 영역 메모리에 호출되어 진다. 이렇게 호출되어진 것들은 프로그램이 종료되기 까지 유지된다. 즉, 프로그램의 시작과 끝을 함께하는 Main 메소드는 프로그램이 종료되는 시점까지 유지해야하기 때문에..
Immutable Immutable Class는 변경이 불가능한 클래스이며, 레퍼런스 타입의 객체이기 때문에 heap영역에 생성된다. Immutable Class는 변경이 불가능한 것이지 재할당은 가능하다. (소스로 살펴보자) //String, Boolean, Integer, Float, Long 등등이 해당 String str = "test"; str = "test2"; //재할당 소스를 통해 확인해보자 String str = "test"; System.out.println(str.hashCode()); str = "test2"; System.out.println(str.hashCode()); Immutable 특징 장점 멀티 스레드 환경에서 thread-safe가 가능하다. 안전한 공유와 재사용이..
equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서는 hashCode도 재정의해야한다. 만약, hashCode를 재정의하지 않을 시, HashMap이나 HashSet 같은 컬렉션의 원소로 사용할 때 문제를 일으킬 것이다. Object 명세에서 발췌한 규약을 살펴보자 Equals 비교에 사용되는 정보가 변경되지 않았다면, hashCode 메소드는 몇번을 호출해도 항상 같은 값을 반환해야 한다. 단, 애플리케이션이 다시 시작할 시에는 이 값이 달라져도 상관 없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object)가 두 객체르 다르다고 판단했더라도, 두 객체의 hashCod..
- Total
- Today
- Yesterday
- package-private
- 점층적 생성 패턴
- ifPresent
- flatMap
- Effective Java
- 빌더 패턴
- 빈 순환 참조
- 연관관계
- 팩토리 메소드 패턴
- 생성자
- junit
- @Lazy
- jdk버전
- try catch finally
- 정적팩터리메서드
- java8
- 인프런
- 자바8
- Spring
- 스프링부트
- springboot
- 복사 팩토리
- 이펙티브 자바
- effectivejava
- 김영한
- try with resources
- JPA
- mustache
- 이펙티브자바
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |