본문 바로가기

java

Java에서의 문자열 자바에서의 문자열 자바에서 모든 문자열(string)은 String 클래스를 통해 표현된다. 그리고 String 클래스는 아래를 통해 확인할 수 있듯이, 문자열을 final한 byte 배열에 나누어 저장하기 때문에 변경될 수 없어 immutable하다고 불린다. 그러나 String 클래스의 객체를 생성해야만 문자열을 만들 수 있는 것은 아니다. "" 를 통해 문자열 리터럴(String literal)을 생성할 수 있다. 그럼 String 객체와 문자열 리터럴의 차이는 무엇일까? String 객체 new 키워드를 통해 String 객체를 생성하면, Heap 영역 내에 해당 문자열을 가진 새로운 객체가 생성된다. 이후, 똑같은 문자열을 갖고 다시 new 키워드를 통해 다른 객체를 생성하면 역시 문자열은 같지.. 더보기
[Spring] java.lang.IllegalArgumentException: id to load is required for loading 오류 Spring에서 아래와 같은 오류 메세지를 만났다. org.springframework.dao.InvalidDataAccessApiUsageException: id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading loading 하기 위해서는 id가 필요한데 찾을 수 없다. 라는 오류 메세지이다. 차근차근 오류를 찾아갔다. 나의 경우에는 아래 상황에서 문제가 발생했다. Item book = new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10.. 더보기
[Java] HashMap 내부 코드에 존재하는 transient 키워드 HashMap의 내부 코드를 부면 데이터를 아래와 같이 저장하고 있다. transient Node[] table; transient 키워드는 serialize 하는 과정에서 데이터를 제외하고 싶은 경우 선언된다. 예를 들어, 로그인 데이터와 같은 보안적인 내용이나 불필요한 데이터일 경우 사용할 수 있다. (deserialize 해보면, 해당 transient field에는 null 값이 들어있다.) 그런데 HashMap에서는 왜 table에 transient 키워드를 적용시킬까? table을 알아야 빠르게 검색할 수 있는 게 아닐까? 이 질문에 대한 답을 stackoverflow에서 찾았다. HashMap은 serialize할 때 사용되는 wrtieObject(), readObject() 메서드를 자체적.. 더보기