목록study/java (3)
킴의 레포지토리
1. ThreadLocal과 SecurityContext1-1.ThreadLocal이란?ThreadLocal은 java.lang 패키지에 속하는 클래로 특정 스레드와 관련된 상태를 저장하기 위해 사용된다. 클래스의 private static 필드로 사용되는 경우가 많다. thread는 메모리를 어떻게 공유하고 사용하나threadlocal은 왜사용하는가threadlocal 사용시 주의할점은Spring Security에서 ThreadLocal을 사용하는 이유Spring Security는 기본적으로 ThredLocal을 사용하여 SecurityContext를 저장한다. 아래는 SpringSecurity에서 인증 정보를 저장하기 위해 사용하는 SecurityContextHolder클래스이다. 1.에서 확인할 수..
List students = List.of( new Student("hong", 100, Student.Sex.MALE, Student.City.Seoul), new Student("kim", 80, Student.Sex.FEMALE, Student.City.Seoul), new Student("park", 50, Student.Sex.MALE, Student.City.Pusan) ); Map avgScoreBySex = students.stream() .collect( Collectors.groupingBy( Student::getSex, TreeMap::new, Collectors.averagingDouble(Student::getScore))); avgScoreBySex.entrySet() .for..
프로그램을 몇개 개발해보면서, 단순히 동작하는 프로그램을 넘어 변경에 유연하게 대응할 수 있는 설계의 중요성을 깨달았다. 계속해서 변경되고 추가되는 요구사항을 수용하려면 종종 프로그램 전체를 수정해야 하고, 예상치 못한 곳에서 발생하는 버그로 인해 프로그램 수정이 어려워지면, 결국 기존 코드의 재사용을 포기하고, 처음부터 새롭게 코드를 작성하는 상황에 직면할 수도 있다. 혼자 개발하는 상황에서도 변경된 요구사항을 반영하는게 부담되는데, 많은 컴포넌트가 상호작용하는 실제 서비스에서는 변경에 취약한 코드가 더욱 심각한 비효율을 초래한다. 이에, 진정한 의미의 좋은 설계가 무엇인지에 대해 다시 한번 깊이 고민해보기로 했다. 이 글에서는 첫째, 좋은 설계란 무엇인지 둘째, 왜 객체지향 설계가 좋은 설계를 위한 ..