본 게시물은 해당 블로그에서 레퍼런스를 번역한 자료임을 알립니다. 퍼가실때 해당 블로그의 주소는 밝히실 필요가 없으나 레퍼런스의 주소는 밝혀주시면 감사하겠습니다. 자바의 GC를 이용한 메모리 관리는 해당 언어가 이륙한 엄청난 성과 중 하나라 할 수 있다. GC는 개발자로 하여금 메모리 할당과 할당 해제를 걱정할 필요없이 새로운 객체를 생성할 수 있게 해주었는데, 이는 GC가 자동으로 메모리를 다시 회수해주기 때문이다. 메모리 누수와 다른 메모리 관련된 문제를 전혀 걱정할 필요없이 더 적은 보일러플레이트 코드를 작성하게 함으로써 더 빠른 개발을 가능하게 하였다. (이론적으로는) 아이러니하게도 자바의 GC가 일을 "너무" 잘 하는 바람에, 너무 많은 객체를 생성하고 제거한다. 덕분에 대부분의 메모리 관련 문..
결론 결론부터 말하자면 그냥 자바에서 String을 Immutable로 만드는 것이 더 좋다고 판단하였기 때문에 Immutable인 것이다. 그래서 질문을 바꿔 다시 물어봐야 한다. 왜 자바의 디자이너는 String을 Immutable로 설계하였을까? 디자인적인 측면 자바에서는 특별한 존재인 String을 String Constant Pool이라고 불리는 리터럴 String을 보관하는 영역이 heap에 따로 존재한다. String이 기본 객체 중 가장 많이, 자주 사용되기 때문에 객체를 생성하고 제거하는데 드는 오버헤드를 최소화하기 위해 String만을 위한 특별한 메모리 구역을 heap 영역에 만들어두고 이를 HashMap 형태로 관리한다. (String Constant Pool은 HashMap으로 구..
자바에서 객체가 같은지 비교하기 위해 equals()와 hashCode()를 오버라이딩하여 사용한다. 동작 원리를 알아보고 왜 오버라이딩이 필요한지 알아보자. 오버라이딩 되지 않은 equals() public boolean equals(Object obj) { return (this == obj); } 오버라이딩하지 않은 Object의 equals()는 단순하게 객체의 주소값만을 비교해서 주소가 같으면 true 아니면 false를 반환한다. ==와 똑같이 동작한다. String의 equals() String의 equals는 다르게 동작한다. 자바에서 String은 항상 특별취급받는 존재이다! String의 equals는 다음과 같다. 주소를 비교해서 같으면 true. charArray를 비교해가면서 다를..
프레임워크의 내부 구현체를 공부하다 보면 심심치 않게 나오는 단어가 Reflection이었고 많은 사람들이 리플렉션이 느리다고 하지만 딱히 속시원하게 설명해주는 글이 없어 따로 공부해보았다. 리플렉션이란 리플렉션은 런타임에 결정될 클래스 타입을 컴파일 시에 결정한 것처럼 행동할 수 있게 하는 API이다. 어떤 클래스가 들어오든 미리 리플렉션 해둔 클래스처럼 행동하게 만들 수 있다는 것이다. 다만 클래스 타입은 동적으로 그때 그때마다 결정된다. 리플렉션은 일종의 desired state를 명시하는 것이다. 이 말만 들으면 마치 리플렉션이 Silver Bullet인 것처럼 느껴지지만 당연하게도 프로그래밍에 은탄환은 존재하지 않는다. 리플렉션의 단점을 알아보자. 단점 성능 상의 가장 큰 문제점은 컴파일러 최적..
forEach로 이중 for문을 돌면서 if문에 부합하면 값을 set하는 함수를 작성했다. for (ItemResponse itemResponse : itemResponses) { for (Zzim zzim : zzims) { if (itemResponse.getItemId().equals(zzim.getItem().getId())) { itemResponse.setIsZzimed(zzim.getIsZzimed()); break; } } } 모양새가 영 마음에 들지 않아 최대한 스트림으로 변환해서 사용하고자 했다. 익명의 유저에게 도움을 받아 작성한 스트림 코드는 다음과 같다. itemResponses.forEach(itemResponse -> { zzims.stream().filter(zzim -> i..
- Total
- Today
- Yesterday
- RequestParam
- Dap
- 루나빔
- JavaScript
- 레디스
- neovim
- 도커
- RequestBody
- 배포
- RequestPart
- vim
- ModelAttribute
- 아키텍처
- lunarvim
- IDE
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |