목록Language (21)
영호
들어가면서, 이번 프로젝트 중 만든 DTO에 isRegistered라는 boolean타입 필드가 존재했다. 나는 해당 필드에 null이 들어갈 일이 없다고 생각해 primitive type인 boolean을 사용하면서 발생한 문제와 해결 방법에 대해 쓸 예정이다. 문제점 jackson라이브러리에서 primitive type인 boolean을 쓰고 필드명에 isXXX를 사용하면 is가 자동으로 삭제된다. 그래서 만약 isSuccess라는 필드가 boolean으로 선언되어 있다면 실제 반환되는 json에는 success가 들어가게된다. 해결방법 현재 내가 알고 있는 해결방법은 3가지가 있다. @JsonProperty(value = "isXXX") @JsonProperty를 사용하면 반환되는 json의 key..
개요 generic에서 왜 기본타입을 사용할 수 없는지 궁금해서 찾아본 내용입니다:) generic등장 이전 generic이 존재하지 않을 땐 아래 코드처럼 List를 사용할 수 있었습니다. List integerList = new ArrayList(); integerList.add(new Integer(1)); Integer integer = (Integer) integerList.get(0); 해당 List는 Object타입을 원소를 받을 수 있습니다. 즉, 기본 타입을 제외한 모든 참조타입을 원소로 넣을 수 있습니다. 이러한 방식의 문제점은 코드에서 바로 살펴볼 수 있습니다. get으로 원소에 접근할 때 명시적인 형변환 작업이 필요하다. 만약 String타입 원소를 넣었는데 Interger로 변환하..
개요 우아한테크코스 체스미션 진행 중 빈 리스트를 반환해야 하는 일이 있었는데, 그동안 빈 리스트를 반환할 때 무심코 사용하던 코드들에 대해 어떤 차이가 있는지 궁금해서 찾아본 과정에 대해 작성해보겠습니다:) Collection.emptyList() 처음에는 단순히 Collections에서 정적 팩토리 메서드를 이용해 빈 리스트를 생성해 반환해주나? 라는 생각으로 접근했습니다. Collection.emptyList()내부 구현을 봤더니 예상하지 못했던 코드가 있었습니다. EmptyList라는 클래스가 존재한다. EmptyList라는 클래스가 별도로 존재했고 이를 List타입으로 캐스팅해 반환해주고 있었습니다. EmptyList의 Collections의 메서드들에 대해 빈 리스트에 맞게 정의되어 있습니다...
동일성 두 객체가 물리적으로 같은 주소에 저장되어 있는지에 대한 성질로 ==연산자를 통해 동일성을 비교할 수 있습니다. 동등성 두 객체의 필드값이 같은지에 대한 성질입니다. 두 객체의 필드 값이 같다면 두 객체는 논리적으로 동등하다고 할 수 있고, equals()를 통해 비교 가능합니다. 객체 비교 방법 우리는 객체가 같은지 비교할 때 equals()를 사용한다. 그 이유는 ==은 객체의 주소를 비교해 두 객체가 동일한지 물리적 동일성을 비교한다. equals()는 객체의 주소가 아닌 내부 필드값들이 같은지 논리적 동등성을 비교한다. 이제부터 equals를 쓰기 위해 equals, hashCode에 대해 알아보겠습니다. equals와 hashCode를 재정의 하면 contains에서도 이점을 볼 수 있습..
개요 Enum을 활용하다 보면 filed값을 이용해 Enum 인스턴스를 조회해야 하는 경우가 있습니다. 이때, Stream, HashMap 등을 사용할 수 있습니다. 이 글에서는 HashMap을 활용한 Enum인스턴스 조회 방법을 알아보겠습니다. HashMap활용 코드 package enumPractice; import java.util.Arrays; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public enum Number { ONE(1), TWO(2), THREE(3); private final int number; Number(int number) { this.number ..
개요 stream을 공부하면서 Array를 stream으로 만드는 방법이 2가지가 있는 것을 알았고, 2가지 방법의 차이점에 대해 궁금증이 생겨 알아본 내용입니다. Collection이 아닌 Array를 stream으로 만들 때 2가지 방법이 있습니다. Arrays.stream() Stream.of() 위 2가지 방법은 parameter로 primitive타입의 배열을 넘기느냐, non-promitive타입의 배열을 넘기느냐에 따라 반환 값이 달라집니다. Stream.of() primitive타입 배열로 Stream.of() 호출했을 때 실행되는 코드 public static Stream of(T t) { return StreamSupport.stream(new Streams.StreamBuilderIm..
instance method란 class의 instance를 생성하고, 해당 instance를 통해 호출할 수 있는 method입니다. static method란 컴파일 시점에 메모리에 올라갑니다. instance 생성없이 클래스를 통해 호출할 수 있는 method입니다. instance변수를 사용할 수 없습니다. instance변수란 말 그대로 동적으로 생성된 instance의 변수이기 때문에 컴파일 시점에 존재하지 않습니다. static method주의점 GC(Garbage Collector)가 메모리를 해제하지 않기 때문에, 너무 많이 사용하면 메모리 측면에서 문제가 생길 수 있습니다.
HashMap이란 Java의 collections 중 Map인터페이스를 구현한 클래스 중 하나입니다. 파이썬의 딕셔너리처럼 "Key : Value"형태로 이루어져 있습니다. 이미 존재하는 Key에 새로운 값을 넣을 경우 기존 값은 새로운 값으로 대체됩니다. Key는 중복될 수 없습니다. Map hashMap = new HashMap(); hashMap.put("test", 1); hashMap.put("test", 2); System.out.println("hashMap = " + hashMap); // hashMap = {test=2} 멀티 스레드 환경에서는 ConcurrentHashMap을 사용해야 합니다. 해시 함수를 이용해 값을 저장하고 찾기 때문에 데이터 검색에서 속도가 빠른 장점이 있습니다. ..