Java 4

자바 직렬화와 JPA Entity, Spring

Serialization데이터 구조(객체, 리스트 등)을 바이트 스트림으로 변환하는 것시스템 간 데이터 전송, 저장을 위함typesstring: csv, xml, jsonbinary: java serialization, apache avro, protocol buffer  Java Serialization를 보면 이런 문장이 있다.“당신이 작성하는 새로운 시스템에서 자바 직렬화를 써야 할 이유는 전혀 없다.” 구현primitive type이거나 Serializable 인터페이스를 구현해야 한다.클래스의 모든 멤버가 직렬화 가능해야 한다. (trasient 멤버 제외)serialVersionUID: 객체의 버전. 미입력시 컴파일러가 자동으로 만들어준다. ObjectOutputStream의 writeObje..

Java 2024.08.30

책 <이펙티브 자바>

생성자 대신 정적 팩터리 메서드를 고려하라. 장점 이름을 가질 수 있다. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 반환 타입의 하위 타입 객체를 반환할 수 있다. (반환할 객체의 클래스를 자유롭게 선택할 수 있다.) 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. (인터페이스를 반환해도 된다.) 단점 상속을 하려면 public이나 protected 생성자가 필요해서, 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다. 정적 팩터리 메서드는 프로그래머가 찾기 어렵다. 클래스를 인스턴스화 하는 방법을 API 문서에 잘 써놓아야 한다. 흔히 사용되는 명명 방식: from, of, valueOf, instance, getInstance, create, ..

Java 2024.03.18

알아두면 좋을 유용한 JDK 도구

javac, java, jar 도구만 알고 있는가? JDK의 bin/ 디렉토리에는 유용한 도구가 많다. PATH 환경변수에 포함되었다면 어디서든 호출할 수 있다. 어떤 것들이 있는지 알아두면 나중에 유용하게 쓰일 것이다. jps 실행 중인 모든 JVM 목록을 보여준다. 프로세스 ID와 애플리케이션 주 클래스 이름만 출력하므로 프로세스를 구분하기 쉽다. ps aux | grep java 명령어 대신 간단하게 사용해볼 수 있다. -l : 주 클래스의 완전히 식별가능한 이름을 보여준다. -m : main 메서드에 전달된 매개변수를 보여준다. -v : JVM 자체에 전달된 모든 매개변수를 보여준다. javap javap 을 실행하면 해당 클래스 파일의 필드와 메서드를 볼 수 있다. -c : 메서드의 완전한 바이..

Java 2022.10.10

Wildcards in Java

아래와 같은 코드는 컴파일 에러가 발생하지 않는다. public class Test { public static void main(String args[]) { test(new Building()); test(new House()); } static void test(Building building) {} } class Building {} class House extends Building {} 이미 알고 있겠지만, House는 Building을 상속받기 때문이다. 주어진 타입 변수는 서브 타입으로 대체 가능하다. 이를 Substitution principle(치환 원리)이라고 한다. 아래 코드도 컴파일 에러가 발생하지 않는다. public class Test { public static void ma..

Java 2022.08.10