분류 전체보기19 [스프링 핵심 원리 - 고급편] 4. 전략 패턴으로 유연하게 동작 변경하기 [스프링 핵심 원리 - 고급편] 4. 전략 패턴 전략 패턴 - 정의 다수의 책과 문서에서는 전략 패턴을 다양하게 정의하고 있습니다 1. 행위에 대한 전략 클래스를 각각 생성하고, 유사한 행위들을 캡슐화하는 인터페이스를 정의한다. 객체의 행위를 변경할 때 직접 행위를 수정하지 않고 전략을 변경함으로써 행위를 유연하게 확장하는 방법을 말한다. 2. 변하지 않는 부분을 "Context" 라는 곳에 두고, 변하는 부분은 "Strategy"라는 인터페이스를 만들고 해당 인터페이스를 구현하여 위임으로 문제를 해결하는 것이다. 3. 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 4. 런타임 중에 알고리즘.. 2024. 1. 3. [스프링 핵심 원리 - 고급편] 3. 템플릿 메서드 패턴으로 중복 코드 제거하기 [스프링 핵심 원리 - 고급편] 3. 템플릿 메서드 패턴 템플릿 메서드 패턴 - 정의 다수의 책과 문서에서는 템플릿 메서드 패턴을 다음과 같이 정의하고 있습니다. 1. 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기하는 것 2. 부모 클래스에서 알고리즘의 골격을 정의하고 자식 클래스들에서 오버라이드를 이용해 특정 단계를 개발하는 패턴 3. 상속을 통해 슈퍼 클래스의 기능을 확장할 때 사용하는 방법, 변하지 않는 기능은 슈퍼클래스에 만들어 두고 자주 변경되며 확장할 기능은 서브 클래스에서 만드는 패턴 4. 변하지 않는 기능은 슈퍼클래스에 만들어두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 하는것 공통적인 내용만 정리하면 변하지 않는 전체 흐름은 부모 클래스에 정의하고 중간에 변경되는 .. 2023. 12. 28. [Java] 스트림(Stream) [Java] 스트림(Stream) 정의 스트림은 통상적으로는 시내, 물줄기 등을 의미합니다. Java에서 스트림은 "데이터 처리 연산을 위해 데이터소스(컬렉션, 배열)에서 출력된 연속된 요소"라고 할 수 있습니다. Java8에서 추가된 기능으로 순회하는 연산을 복잡한 반복문(for, while 등)대신 간결한 함수형으로 표현할 수 있습니다. 또한 쓰레드를 이용한 병렬처리(Parallel)를 쉽게 구현할 수 있고, 많은 요소를 빠르게 처리할 수 있습니다. 특징 Java의 I/O Stream과 이름은 스트림으로 동일하나 전혀 다른 개념이다. 다양한 자료구조, 데이터소스(Map, Set, Array)를 동일한 방식으로 처리할 수 있다. 데이터를 담는 저장소(컬렉션)가 아닌 데이터 처리 과정을 의미한다. 원본 .. 2023. 1. 30. [Java] String 문자열 비교할 때 equals() 와 contentEquals() 차이점 [Java] String 문자열 비교할 때 equals() 와 contentEquals() 차이점 Java에서 String 클래스의 equals()와 contentEquals() 메서드는 문자열을 비교할 때 사용합니다. 두 메소드가 비슷한 기능을 하는 것 같은데 정확히 어떤 차이점이 있는지 어느 상황에서 사용해야 하는지 알아보겠습니다. 우선 공통점은 둘 다 String 클래스의 public 메서드라는 것입니다. 그리고 해당 String 인스턴스의 문자열 값과 입력 매개변수의 문자열을 비교하여, 두 문자열이 정확히 같으면 true, 다르면 false를 반환하는 메서드입니다. equals() String 클래스도 기본적으로 Object 클래스를 상속받고 있으며 Object 클래스의 equals() 메서드를 .. 2023. 1. 3. [Java] 현재 실행중인 클래스명, 메소드명 알아내기 [Java] 현재 실행중인 클래스명, 메소드명 알아내기 로깅 같은 기능을 개발하다 보면 현재 클래스명과 메소드명을 로그로 출력해야 되는 경우가 있습니다. 이때 문자열로 클래스명, 메소드명을 수동으로 입력하다 보면 실수나 오타가 발생할 수 있기 때문에 자동으로 알아낼 수 있다면 좋겠다고 생각했습니다. 방법은 여러가지 있을것 같은데 크게 두가지 방법을 설명드리겠습니다. 첫번째는 java의 리플렉션 기능을 이용하여 알아내는 방법입니다. public String exampleMethod() { String className = new Object(){}.getClass().getEnclosingClass().getSimpleName(); String methodName = new Object(){}.getCla.. 2022. 12. 29. [스프링 핵심 원리 - 고급편] 2. 동시성 문제를 ThreadLocal로 해결하기 [스프링 핵심 원리 - 고급편] 2. 동시성 문제를 ThreadLocal로 해결하기 인프런의 스프링 핵심 원리 고급편을 듣고 정리한 내용입니다. 동시성 문제 여러 쓰레드에서 동시에 같은 인스턴스의 필드값을 접근해서 변경할 때 발생할 수 있는 문제를 말합니다. 일반적으로 동시성 문제가 발생하기 전에 미리 생각하기 어려운 이유는 쓰레드 및 스프링 Bean 인스턴스 관리는 WAS나 프레임워크 영역에 가깝고 애플리케이션 개발할 때 신경을 안 쓰는 경우가 많기 때문입니다. 그래서 동시성 문제에 대한 개념을 모르면 비지니스 로직만 봤을 때 문제가 있다고 직관적으로 판단하기 힘들 수 있습니다. 이런 문제가 있다는 것 알고 난 후에는 싱글톤으로 생성된 인스턴스의 필드값을 변경하는 로직이 있는 경우 동시성 문제를 주의해.. 2022. 12. 29. 이전 1 2 3 4 다음