💡 가변객체로 시작해서 단계적으로 불변객체를 만들어보자.문제 1) 객체의 변수가 public인 경우문제: 외부에서 값을 변경해버릴 수 있다.변경 전 코드public class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; }}public class ImmutableMain { public static void main(String[] args) { Person person = new Person("길동이", 20); person.age = 21; }} 해결 1)..
💡 Cache 알고리즘 중 가장 유명하다고 하는 LRU 알고리즘을 LinkedHashMap을 활용하여 공부해보았다. LRU (Least Recently Used) LRU 알고리즘은 운영체제의 페이지 교체 알고리즘 중 하나이다. Cache 알고리즘 중 가장 유명한 알고리즘 이기도 하다. LRU 알고리즘은 가장 오랫동안 참조되지 않은 항목을 교체 하는 알고리즘이다. LinkedHashMap 으로 구현하기 LinkedHashMap 의 다음 생성자를 활용하였다. accessOrder 속성 public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder) { super(initialCapacity, loadFactor); this.ac..
💡 제네릭을 직접 적용해보며 훈련합니다. 다음의 예시처럼 특정 숫자가 정해진 숫자 범위 안의 숫자에 해당하는지 확인하는 조건문이 있다. if (age >= 10 && age = 10 && age of(N start, N end) { return new Range(start, end); } public boolean contain(N target) { return start.doubleValue()
최근에 람다를 사용하다가 다음과 같은 에러가 발생했습니다.🚨 Variable used in lambda expression should be final or effectively final같은 에러가 이전에도 발생한 적이 있었는데 이해하고 넘어가지 않았는지.. 결국 다시 마주하게 되었습니다.😓😓😓 이번엔 제대로 이해해서 비슷한 상황에 같은 에러를 마주하지 않도록 원인에 대해 알아보겠습니다.'Variable used in lambda expression should be final or effectively final'에러 메세지를 가볍게 해석해보자면 ‘람다식에서 사용되는 변수는 final변수이거나 final같은 변수여야 한다.’ 라는 내용으로 해석되네요. 여기서 effectively final 은..