반응형
문제 설명 Solution.java 정답 코드 class Solution { public int solution(String name) { int answer = 0; // 조이스틱 조작 횟수 int len = name.length(); int move = name.length() - 1; // 기본 최소 좌우이동 횟수 (좌, 우 커서) // 해당 커서 알파벳 변경 최솟값 (위, 아래 커서) for (int i = 0; i < len; i++) { answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1); // 연속된 'A'가 끝나는 지점 찾기 int next = i + 1; while(next < len && name.charAt(next)..
동시성이란? 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제를 동시성 문제라고 합니다. 이런 동시성 문제는 여러 쓰레드가 같은 인스턴스의 필드에 접근해야 하기 때문에 트래픽이 많을 때 자주 발생하게 됩니다. 특히 자바의 스프링은 기본적으로 스프링 빈을 싱글톤으로 등록하기 때문에 싱글톤 객체의 필드를 변경하며 사용할 때 이러한 동시성 문제를 조심해야 합니다. ( 동시성 문제는 값을 읽기만 하면 발생하지 않고, 값을 변경하기 때문에 발생 ) 동시성 문제는 쓰레드마다 각각 다른 메모리 영역이 할당 지역 변수에서는 발생하지 않고, 동시성 문제가 주로 발생하는 곳은 같은 인스턴스의 필드(주로 싱글톤에서 자주 발생) 접근, 또는 static 같은 공용 필드에 접근할 때 발생합니다. 동시성 ..
DAO(Data Access Object) "실제로 DB의 데이터에 접근하는 객체" DAO는 Service와 DB를 연결하는 역할을 하며, 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행합니다. JPA에서는 DB에 데이터를 CRUD 하는 JpaRepository를 상속받는 Repository 객체들이 DAO라고 볼 수 있습니다. public interface itemRepository extends JpaRepository { } DTO(Data Transfer Object) "계층 간 데이터 교환을 위한 객체" 로직을 가지지 않고 getter/setter 메소드만 가진 순수한 데이터 객체 클래스(Java Beans)로 DB에서 데이터를 얻어 Service나 Cont..
스프링 인터셉터(Interceptor)란? interceptor는 위 처럼 가로챈다는 뜻을 갖습니다. 즉, 스프링 interceptor란 요청을 가로채서 개발자가 원하는 동작을 추가하는 역할을 합니다. 왜 interceptor를 사용해야하는 가? 스프링 interceptor는 웹과 관련된 공통 관심사를 해결하기 위한 기술로 대표적으로 공통 로그 처리, 권한 체크에 사용될 수 있습니다. 권한 체크를 예를 들면, 로그인을 해야 이용할 수 있는 페이지는 비로그인 사용자가 이용할 수 없어야 합니다. interceptor를 이용해 요청을 받아 들이기 전, 세션에서 로그인한 사용자가 있는지 확인해보고 없다면 로그인 페이지로 redirect 시킬 수 있습니다. 스프링 인터셉터 구현하기 (HandlerIntercept..
@ExceptionHandler 스프링은 API 예외 처리 문제를 해결하기 위해 @ExceptionHandler 라는 애노테이션을 사용하는 매우 편리한 예외 처리 기능을 제공합니다. 사용방법은, 잡을 예외를 파라미터로 갖는 메서드를 만들고 메서드 위에 @ExceptionHandler 애노테이션을 선언하여 사용합니다. 해당 컨트롤러에서 처리하고 싶은 예외를 지정해주면 해당 컨트롤러에서 예외가 발생할 경우 이 메서드가 호출됩니다. (발생한 예외를 잡으면 지정한 예외 또는 그 예외의 자식 클래스는 모두 잡습니다.) 에러 코드와 메세지를 갖는 객체 오류가 발생하면 단순하게 오류 코드와 메시지를 JSON 데이터로 보내는 단순한 구조를 갖는 예제로 설명하겠습니다. @Data @AllArgsConstructor pu..