서론 공변성과 제네릭 그리고 와일드카드에 대해서 알아보고 마지막으로 @SafeVarargs 어노테이션을 소개로 마무리한다. 공변성과 배열 자바의 공변성은 하위 클래스의 객체를 상위 클래스의 참조 변수로 참조할 수 있는 성질을 의미한다. 다르게 말하면 상속 관계에서 파생된 클래스의 객체가 부모 클래스의 객체처럼 취급될 수 있음을 말한다. 자바에서 공변성을 만족하는 대표적인 예시가 바로 배열이다. 예를 들어, 배열의 원소 타입이 상속 관계를 가질 때, 배열 자체의 타입 간에도 상속 관계가 유지된다. 간단히 말하면 하위 타입의 배열은 상위 타입의 배열로 취급될 수 있다. @Test void test_array() { Number[] numbers = new Number[4]; numbers[0] = 1; nu..
서론 최근에 인턴 면접관으로 참여할 일이 생겨 지원자들이 제출한 코드를 훑어보던 중 재밌는 코드를 발견했습니다. @Component public class SessionStore { // key : userId // value : session string private final HashMap memorySession = new HashMap(); // CRUD method ... } 바로 유저의 세션을 인 메모리 방식으로 관리하는 컴포넌트가 정의되어 있었습니다. 유저의 세션을 인 메모리 방식으로 구현한 것도 흥미로웠는데 무엇보다 싱글톤 빈에 정의한 멤버 변수에 이목이 끌렸습니다. 빈의 생명주기에 대해서 공부할 때 줄곧 싱글톤 빈에 상태를 저장하지 말라고 배웠으니 말이죠. 그렇다면 앞선 코드는 정상 동..
JMH(Java Microbenchmark Harness) JMH는 Java 언어로 작성된 코드의 성능을 측정하는 도구로, 특히 벤치 마이크로벤치마크를 수행하는 데 사용한다. 마이크로벤치마크는 작은 단위의 코드에 대한 경과 시간, 명령어 처리 속도 등을 측정하는 프로그램을 의미한다. 이는 성능 최적화나 코드 변경에 대한 영향을 정량적으로 측정할 때 유용하게 사용할 수 있다. 환경 설정 신뢰할 수 있는 결과를 얻기 위해서는 Maven을 사용해서 jar 파일로 빌드하고 이를 실행해서 테스트하길 권장하고 있다. IDE에서 실행하는 테스트는 결과의 신뢰성이 떨어진다는게 공식 문서의 입장이다. 샘플 maven project 생성 $ mvn archetype:generate -DinteractiveMode=fals..
2023.04.14 금요일 몸 푸는 추신수 승요답게 경기는 승리 2023.06.04 일요일 어느 한적한 도시의 자라 거북이 너무 빤질거려서 모형인 줄 2023.09.30 토요일 올해도 어김없이 자란 엄빠 밭의 롬복 매웠다 한동안 블로그 활동을 안 했다 회사일도 바빴지만 블로그를 대하는 내 태도가 불량해졌다. 어느 순간 글 쓰는 게 조금 귀찮고 부담스럽달까... 마음은 조금씩 떠나갔지만 공부는 꾸준히 해왔고 조만간 다시 끄적이겠다는 다짐은 있었는데 이렇게 길어질지 몰랐다. 어떤 개념을 잘 정리해서 퍼블릭한 공간에 올리는 것과 그냥 머릿속에 저장하는 건 지식을 대하는 태도나 이해하는 측면에서 깊이가 다른 것 같다. 그런 의미에서 다시 블로그의 필요성을...
✍️ 브릿지 패턴, 소개 브릿지 패턴은 하나의 클래스로부터 파생되는 두 가지 개념을 분리하여 각각을 독립적으로 확장하고, 이를 두 개의 컴포넌트로 결합하는 디자인 패턴이다. 이 패턴을 도입하는 대표적인 케이스는 두 가지 다른 속성을 조합하여 하나의 클래스로 표현하는 작업이 반복적으로 발생할 때이다. 브릿지 패턴을 설명하는 대표적인 예시로 도형과 색을 이야기할 수 있다. Shape에서 파생되는 두 가지 개념 도형과 색을 조합하여 하나의 클래스로 표현하다 보면 중복 코드 증가, 코드의 결합도 상승, 기능 수정과 확장에서 문제가 발생한다. 브릿지 패턴은 서로 다른 속성을 클래스로 분리하고, 한 쪽 클래스가 다른 쪽 클래스를 포함하는 컴포지션을 통해 문제를 해결한다. 이 물리적인 클래스 분리로 클라이언트가 직접..
✍️ 악취 25 : 주석 주석이 많다는 것은 코드에 악취가 많다는 방증이기도 하다. 주석이 많이 달린 코드를 리팩토링의 대상으로 선정해서 리팩토링을 적용한다면 코드가 가진 문제점을 해결하면서 동시에 주석이 필요 없어질 수도 혹은 주석의 내용이 간결하고 명확해질 수 있다. 주석이 많이 달린 코드 뭉치는 '함수 추출하기'를 사용해서 별도의 메서드로 분리할 수 있고, 장황하고 긴 이름의 메서드는 '함수 선언부 변경하기'를 적용할 수 있다. 주석에 명시된 시스템의 규약을 '어서션 추가하기'로 변경할 수도 있다. 여기 주석 악취를 해결하기 위한 세 가지 리팩토링 기법이 있다. 1. "함수 추출하기" 주석이 달린 코드 뭉치가 있다면 2. "함수 선언부 변경하기" 주석이 달린 장황하고 긴 이름을 가진 메서드가 있다면..