[Java] 추상 클래스와 인터페이스
·
Java
개인적으로 추상 클래스와 인터페이스가 비슷한 개념이라고 생각해 헷갈릴 때가 많았는데 이번에 두 클래스의 차이점에 대해 공부해 보자. 추상 클래스 추상 클래스는 인스턴스화할 수 없는 클래스로 다른 클래스에 의해 구현이 되도록 설계된 클래스이다. abstract 키워드로 선언해야 하며, 추상 클래스에는 구현체가 존재하지 않는 추상 메서드가 하나 이상 포함이 되어야 한다. 그렇다고 추상 클래스에는 추상 메서드만 존재하는 것이 아니라 일반적인 메서드, 생성자, 필드를 가질 수 있다. 추상 메서드는 메서드가 선언이 되었지만 구현이 없는 메서드이다. 추상 클래스의 하위 클래스는 추상 클래스 안에 있는 모든 추상 메서드를 구현해야 한다는 특징이 있다. 추상 클래스의 예시 코드를 살펴보자. 추상 클래스 Animal p..
[JPA] @Transactional(readOnly = true)의 효과와 사용 시 주의할 점
·
Java/Spring
기존 프로젝트에서 @Transactional으로 설정해 준 서비스에 readOnly 속성을 사용하지 않고 있었는데 데이터를 읽기만 하는 서비스에 readOnly = true를 적용해 읽기 전용 모드로 설정해 주는 것이 좋을 것 같다는 이야기를 듣고 읽기 전용으로 설정해 주면 어떤 효과를 얻을 수 있는지 알아봤다. @Transactional(readOnly = true) Spring에서 @Transactional 어노테이션을 사용할 수 있는데 트랜잭션을 readOnly = true로 설정해 주면 읽기 전용 모드로 변경할 수 있다. 그러면 @Transactional(readOnly = true) 속성을 적용함으로써 얻을 수 있는 이점에 대해 알아보자. 우선 @Transactional(readOnly = tr..
[Java] Type erasure 알아보기
·
Java
이전 면접에서 type erasure에 대해 질문을 받았었는데 처음 듣는 개념이라 아무 말도 못 했기 때문에 오늘은 type erasure를 공부해 봤다. type erasure에 대해 알아보기 전에 제네릭의 개념을 알아야 하는데 간단하게 제네릭을 정의하면 클래스나 메서드를 선언할 때 이나 같은 타입을 지정할 수 있는데, 이를 통해서 다양한 타입의 객체와 함께 쓰이면서, 유연하고 재사용 가능한 코드를 작성할 수 있다. 제네릭에 대해서는 이전에 정리한 글이 있어 참고하면 좋을 것 같다. https://seungjjun.tistory.com/251 Type erasure 타입 소거(type erasure)란 컴파일 시 코드에서 제네릭 타입의 정보를 제거하고 Object 같은 기본 타입으로 대체하는 과정을 말..
[Java] 리플렉션(Reflection)공부하기
·
Java
리플렉션(Reflection)이란? 리플렉션은 런타임 시 클래스, 객체, 메서드, 필드의 동작을 검사하고 조작할 수 있게 해주는 자바의 기능 중 하나이다. 그리고 표준 자바 코드만으로는 할 수 없는 클래스를 동적으로 로드, 새로운 객체 생성, 메서드 호출 같은 작업을 수행할 수 있다. 리플렉션에 대한 정의만 봐서는 와닿지도 않고 이해하기 쉽지 않다. 간단히 리플렉션이 할 수 있는 기능을 예시 코드를 보면서 이해해 보자. 우선 앞으로 다른 예제 코드에서 계속 사용할 Person 클래스를 만들고 시작하자. person 클래스에는 private로 생성된 name, age 필드가 있고, 생성자와 getter가 존재한다. Person public class Person { private String name; p..
[Java] 제네릭(Generic)이란?
·
Java
제네릭(Generic)이란? 제네릭은 다양한 타입의 데이터와 함께 사용할 수 있게 하는 클래스 및 메서드를 작성할 수 있게 해준다. 그래서 재사용성이 좋은 코드를 작성할 수 있게 해주고, 컴파일 과정에서 타입체크를 해주는 자바(5부터 도입)의 기능 중 하나이다. 다양한 타입의 데이터와 함께 사용할 수 있게 한다는 말이 이해가 잘 되지 않으니 예시 코드로 살펴보자. public class Box { private T content; public void put(T content) { this.content = content; } public T get() { return content; } } Box라는 클래스를 타입으로 선언해주었다. 여기서 이 모양이 제네릭 표현식이다. 일반적으로 꺾쇠 모양 안에 타입을..
[Java] Checked Exception과 Unchecked Exception
·
Java
Java에서 예외는 프로그램 실행 중에 발생할 수 있는 오류 및 예외 상황을 처리하는 데 사용된다. Java의 예외에는 Checked Exception과 Unchecked Exception 두 가지 예외로 구분이 되는데 오늘은 Checked Exception과 Unchecked Exception에 대해 공부해 보자. Checked Exception Checked Exception은 아래와 같은 특징을 갖고 있다. RuntimeException을 상속하지 않는 클래스 컴파일 시점에 컴파일러에서 확인하는 예외 반드시 에러 처리를 해야 하는 특징(try/catch or throw)을 가지고 있다. checked exception의 예시를 코드로 확인해 보자. public class CheckedExceptio..