[Spring] Request 스코프 활용해 HTTP 요청마다 로그 남기기
·
JAVA
@Component@Scope(value = "request")public class MyLogger { private String uuid; private String requestUrl; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message) { System.out.println("[" + uuid + "]" + requestURL + "----" + message); } @PostConstruct public void init() { uuid = U..
[Spring] 전략 패턴 구현, 스프링 빈 모두 불러오기 활용
·
JAVA
static class DiscountService { private final Map policyMap; private final List policies; public DiscountService(Map policyMap, List policies){ this.policyMap = policyMap; this.policies = policies; } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.disco..
중첩 내부 클래스
·
JAVA
public class Network { public void sendMessage(String text) { // 여기서 new NetworkMessage(text) 함 NetworkMessage networkMessage = new NetworkMessage(text); networkMessage.print(); } // 중첩 클래스를 static으로 선언함 private static class NetworkMessage { private String content; public NetworkMessage(String content) { this.content = content; } ..
중첩클래스 활용
·
JAVA
public class Network { public void sendMessage(String text) { // 여기서 new NetworkMessage(text) 함 NetworkMessage networkMessage = new NetworkMessage(text); networkMessage.print(); } // 중첩 클래스를 static으로 선언함 private static class NetworkMessage { private String content; public NetworkMessage(String content) { this.content = content; } ..
날짜와 시간
·
JAVA
1. 날짜의 경우 윤년 ,각 달의 일수 등을 고려해야함 2. 일광 절약 시간 변환(DST) 예시 특정 지역에서는 3월의 마지막 일요일에 DST가 시작되어 10월의 마지막 일요일에 종료된다. 이 기간 동안 발생하는 모든 날짜와 시간 계산은 1시간을 추가하거나 빼는 로직을 포함해야 함. 3. 타임존 계산세계가 다양한 타임존으로 나뉘어 있다. 타임존 간의 날짜와 시간변환을 정확히 계산하는 것은 복잡하다. 서울의 타임존 Asia/Seoult, UTC +9 . 베를린 타임존 UTC + 1둘 차이는 8시간이다. 근데 만약 베를린에서 DST가 적용되면 타임존 차이는 7시간으로 줄어듬. 자바 날짜와 시간 라이브러리 역사 JDK 1.0 (java.utilDate)문제점타임존 처리 부족 : 초기 Date 클래스는 타임존(..
SOLID 원칙
·
JAVA
SRP(단일 책임 원칙)하나의 객체에는 하나의 책임만이 할당되어야 한다. OCP(개방 폐쇄 원칙)기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다. LSP (리스코프 치환 원칙)"하위 클래스의 인스턴스는 상위형 객체 참조 변수에 대입해 상위 클래스의 인스턴스 역할을 하는데 문제 없어야 한다." 하위형에서 선행조건은 강화될 수 없다.- 정의 : 메서드를 호출하기 전에 만족되어야 할 조건이다.- 설명 :상위 클래스(부모 클래스)의 메서드가 요구하는 선행조건이 있다면, 하위 클래스(자식 클래스)에서 이 선행조건을 더 엄격하게(강화하여) 변경하면 안 된다.만약 하위 클래스에서 선행조건을 강화하면, 상위 클래스로 작성된 클라이언트 코드가 하위 클래스의 public class Calculator..
Optional orElse(), orElseGet() 차이점
·
JAVA
Optional 클래스에서 or Else() 와 orElseGet()은 값이 없는 경우 대체값을 제공하기 위해 사용된다. 기본 개념 : Optional에서 대체값 제공 (1) Optional이란?NullPointerException을 방지하기 위해 값을 포장하여 처리하는 객체입니다.Optional을 사용하면 값이 존재할 때와 없을 때를 명시적으로 처리할 수 있다.(2) orElse()와 orElseGet()의 차이orElse 사용 예제public class Main { public static void main(String[] args) { Optional somethingOptional = Optional.ofNullable(null); Integer result = so..
Stream 활용해서 이중 for문 간단하게 만들기
·
JAVA
private static boolean isAllCellOpened() { ///BEFORE boolean isAllOpened = true; for (int row = 0; row Arrays.stream(stringArr)) .noneMatch(cell -> cell.equals(CLOSED_CELL_SIGN)); } 원래 데이터 구조 (2차원 배열)String[][] board = { {"A1", "B1", "C1"}, {"A2", "B2", "C2"}, {"A3", "B3", "C3"}};2차원 배열을 Stream으로 변환Stream stream = Arrays.stream(board);Stream[ [..