Wrapper Class란? 기본 자료형에 대한 클래스 표현이다. Primitive VS Wrapper Primitive는 기본 자료형을 의미한다. int, long, float, boolean과 같이 맨 앞의 이니셜이 소문자인 자료형이다. 초기화될 때에 0이나 false같이 유의미한 값으로 초기화된다. Wrapper는 영어의 의미대로 객체로 한번 감싼 자료형이다. int -> Integer, long -> Long처럼 맨 앞의 이니셜이 대문자인 자료형이다. 초기화될 때에 null로 빈객체로 초기화된다. Wrapper Class를 사용하는 이유 실제로 프로젝트를 진행 중에도 궁금했던 점이다. JPA @Id에 Long을 쓴 이유 김영한님의 강의를 보면 항상 @Id값에 @GeneratedValue를 해 au..
접근자는 변수 또는 메소드의 접근 범위를 설정해주기 위해 사용하는 Java의 예약어를 의미한다. 종류는 아래와 같이 4가지가 있다. public 어떤 클래스에서라도 접근 가능 protected 클래스가 들어있는 패키지 내 + 클래스를 상속받은 클래스(패키지 외부 포함) 접근 가능 default 클래스가 들어있는 패키지 내에서만 접근 가능 private 클래스 내부에서만 접근 가능 public > protected > default > private 순서로 범위가 작아진다.
오버라이딩과 오버로딩 둘 다 같은(중복된) 이름의 메소드에 대한 기능이다. 오버라이딩이란 부모 클래스/인터페이스에 존재하는 메소드를 자식 메소드에서 필요에 맞게 재정의하는 것을 말한다. 동적바인딩 된다는 특징이 있다. 동적바인딩이란? 런타임에 호출될 함수가 결정되는 것이다. interface Parent { public void method(); } class Child extends Parent { @Override public void method() { logic(); } } 해당 경우 Child에서 method()를 호출했을 때, Parent 클래스에 있는 method가 아닌 override된 Child 내의 메소드 로직이 실행된다. 오버로딩이란 같은 이름의 메소드지만 매개변수의 타입이 다르거나 ..
클래스 + final = 다른 클래스에서 상속하지 못한다. 메소드 + final = 다른 메소드에서 오버라이딩 하지 못한다. 변수 + final = 변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 된다. finally - 코드 블록 try-catch 또는 try-catch-resource 구문에서 정상적으로 작업을 한 경우(try)와 에러가 발생했을 경우(catch)를 포함해 마무리해줘야하는 작업이 존재하는 경우 작성해주는 코드 블록이다. 점유하고 있는 리소스를 해제하는 등 마무리에서 꼭 실행해줘야하는 코드가 포함된다. finalize() - 메소드 GC에 의해 호출되는 함수로 절대 호출하면 안되는 함수이다. Object 클래스에 정의되어 있다. GC의 발생시점은 규칙적이지 않기에 해당 메소드가 ..
영속성 전이는 코드로 이해하는 것이 가장 빠른 듯 하다. Before: em.persist()를 3번 해줘야 한다. Child child1 = new Child(); Child child2 = new Child(); // 위의 두 Child객체를 가지는 Parent객체 Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); After: em.persist()를 한번만 해도 된다. Child child1 = new Child(); Child child2 = new Child(); // 위의 두 Child객체를 가지..
저번에 쓴 블로그글 프록시에 대해 이해하고 오면 지연로딩에 대해 이해하기 수월하다. 2023.06.28 - [Spring/이론] - JPA 기본 - 프록시 객체 JPA 기본 - 프록시 객체 JPA에서 프록시 객체가 중요한 이유는 이후 즉시로딩과 지연로딩의 차이를 공부하는데에 있다. 엔티티 객체를 조회할 때는 두가지 메서드가 있다. EntityManager em; em.find(): 데이터베이스를 통해서 layton0-0.tistory.com 프록시 객체는 그 안에 target으로 하는 엔티티 객체가 처음에 비워져 있다. -> .getName()과 같이 실제 값에 접근할 때에 쿼리를 날리고 엔티티 객체를 채워넣는다. 처음에 member에 대한 select문만 db에 날리고, 이후에 member.getTea..
JPA에서 프록시 객체가 중요한 이유는 이후 즉시로딩과 지연로딩의 차이를 공부하는데에 있다. 엔티티 객체를 조회할 때는 두가지 메서드가 있다. EntityManager em; em.find(): 데이터베이스를 통해서 실제 엔티티 객체를 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회 프록시 객체는 엔티티 객체를 상속받아서 만들어졌다. 실제 클래스와 겉 모양이 같아 구분이 잘 되지 않으나 실제로 구분해서 쓸 필요는 없다. 프록시의 객체는 실제 객체의 참조를 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 과정이다. // 프록시 객체 생성 (target은 빈값) Member member = em.getR..
제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. List list = new ArrayList(); 가 있으면 제네릭이다. 안에 String이 들어가 있기 때문에 앞으로 list라는 변수에는 String타입만 저장이 가능하다. 객체의 타입을 지정해주는 것이다. 제네릭의 장점 재사용성 증가 여러 타입의 파라미터를 삽입해 객체를 생성할 수 있어 코드가 간결해지고 재사용성이 높아진다. 동일한 기능을 하는 메서드에서 파라미터 타입만 다르게 사용하는 경우 유용하다. 컴파일 시 타입 에러를 발견 가능 기존에 JDK 1.5 이전에는 인수, 반환값으로 Object타입을 사용해 사용할 때 타입 변환을 새로 해주어야 했다. 현재는 그 과정없이 컴파일 단계에서 타입 오류를 잡아낼 수 있다. 컴파일..