전체 글

https://github.com/Layton0-0
Language/Java

Java 기본 - Wrapper Class 래퍼 클래스

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..

Language/Java

Java 기본 - 접근자

접근자는 변수 또는 메소드의 접근 범위를 설정해주기 위해 사용하는 Java의 예약어를 의미한다. 종류는 아래와 같이 4가지가 있다. public 어떤 클래스에서라도 접근 가능 protected 클래스가 들어있는 패키지 내 + 클래스를 상속받은 클래스(패키지 외부 포함) 접근 가능 default 클래스가 들어있는 패키지 내에서만 접근 가능 private 클래스 내부에서만 접근 가능 public > protected > default > private 순서로 범위가 작아진다.

Language/Java

Java 기본 - 오버라이딩 오버로딩

오버라이딩과 오버로딩 둘 다 같은(중복된) 이름의 메소드에 대한 기능이다. 오버라이딩이란 부모 클래스/인터페이스에 존재하는 메소드를 자식 메소드에서 필요에 맞게 재정의하는 것을 말한다. 동적바인딩 된다는 특징이 있다. 동적바인딩이란? 런타임에 호출될 함수가 결정되는 것이다. interface Parent { public void method(); } class Child extends Parent { @Override public void method() { logic(); } } 해당 경우 Child에서 method()를 호출했을 때, Parent 클래스에 있는 method가 아닌 override된 Child 내의 메소드 로직이 실행된다. 오버로딩이란 같은 이름의 메소드지만 매개변수의 타입이 다르거나 ..

Language/Java

Java 기본 - final 키워드

클래스 + final = 다른 클래스에서 상속하지 못한다. 메소드 + final = 다른 메소드에서 오버라이딩 하지 못한다. 변수 + final = 변하지 않는 상수값이 되어 새로 할당할 수 없는 변수가 된다. finally - 코드 블록 try-catch 또는 try-catch-resource 구문에서 정상적으로 작업을 한 경우(try)와 에러가 발생했을 경우(catch)를 포함해 마무리해줘야하는 작업이 존재하는 경우 작성해주는 코드 블록이다. 점유하고 있는 리소스를 해제하는 등 마무리에서 꼭 실행해줘야하는 코드가 포함된다. finalize() - 메소드 GC에 의해 호출되는 함수로 절대 호출하면 안되는 함수이다. Object 클래스에 정의되어 있다. GC의 발생시점은 규칙적이지 않기에 해당 메소드가 ..

Spring/이론

JPA - 영속성 전이, 고아 객체

영속성 전이는 코드로 이해하는 것이 가장 빠른 듯 하다. 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객체를 가지..

Spring/이론

JPA 기본 - 지연 로딩 즉시 로딩

저번에 쓴 블로그글 프록시에 대해 이해하고 오면 지연로딩에 대해 이해하기 수월하다. 2023.06.28 - [Spring/이론] - JPA 기본 - 프록시 객체 JPA 기본 - 프록시 객체 JPA에서 프록시 객체가 중요한 이유는 이후 즉시로딩과 지연로딩의 차이를 공부하는데에 있다. 엔티티 객체를 조회할 때는 두가지 메서드가 있다. EntityManager em; em.find(): 데이터베이스를 통해서 layton0-0.tistory.com 프록시 객체는 그 안에 target으로 하는 엔티티 객체가 처음에 비워져 있다. -> .getName()과 같이 실제 값에 접근할 때에 쿼리를 날리고 엔티티 객체를 채워넣는다. 처음에 member에 대한 select문만 db에 날리고, 이후에 member.getTea..

Spring/이론

JPA 기본 - 프록시 객체

JPA에서 프록시 객체가 중요한 이유는 이후 즉시로딩과 지연로딩의 차이를 공부하는데에 있다. 엔티티 객체를 조회할 때는 두가지 메서드가 있다. EntityManager em; em.find(): 데이터베이스를 통해서 실제 엔티티 객체를 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회 프록시 객체는 엔티티 객체를 상속받아서 만들어졌다. 실제 클래스와 겉 모양이 같아 구분이 잘 되지 않으나 실제로 구분해서 쓸 필요는 없다. 프록시의 객체는 실제 객체의 참조를 보관한다. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시 객체의 초기화 과정이다. // 프록시 객체 생성 (target은 빈값) Member member = em.getR..

Language/Java

Java 기본 - 제네릭 Generic

제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. List list = new ArrayList(); 가 있으면 제네릭이다. 안에 String이 들어가 있기 때문에 앞으로 list라는 변수에는 String타입만 저장이 가능하다. 객체의 타입을 지정해주는 것이다. 제네릭의 장점 재사용성 증가 여러 타입의 파라미터를 삽입해 객체를 생성할 수 있어 코드가 간결해지고 재사용성이 높아진다. 동일한 기능을 하는 메서드에서 파라미터 타입만 다르게 사용하는 경우 유용하다. 컴파일 시 타입 에러를 발견 가능 기존에 JDK 1.5 이전에는 인수, 반환값으로 Object타입을 사용해 사용할 때 타입 변환을 새로 해주어야 했다. 현재는 그 과정없이 컴파일 단계에서 타입 오류를 잡아낼 수 있다. 컴파일..

레이튼
개발 공부 스케치북