Java

공부/Java

자바의 신 직접해봅시다, 정리해봅시다 정리 (5장 ~ 6장)

자바의 신 세트 | 이상민 - 교보문고 자바의 신 세트 | 『자바의 신 세트』는 성능 전문가로 널리 알려진 저자가 십수 년의 자바 개발 경험을 바탕으로 현장에서 꼭 필요한 기초지식을 정리한 책이다. 현장 중심으로 자바의 기본서 product.kyobobook.co.kr 이전 글 자바의 신 직접해봅시다, 정리해봅시다 정리 (1장 ~ 4장) 자바의 신 세트 | 이상민 - 교보문고 자바의 신 세트 | 『자바의 신 세트』는 성능 전문가로 널리 알려진 저자가 십수 년의 자바 개발 경험을 바탕으로 현장에서 꼭 필요한 기초지식을 정리한 책 devhan.tistory.com 5장. 계산을 하고 싶어요 직접해봅시다. public class SalaryManager { // 월 급여 public double getMont..

공부/Java

자바의 신 직접해봅시다, 정리해봅시다 정리 (1장 ~ 4장)

자바의 신 세트 | 이상민 - 교보문고 자바의 신 세트 | 『자바의 신 세트』는 성능 전문가로 널리 알려진 저자가 십수 년의 자바 개발 경험을 바탕으로 현장에서 꼭 필요한 기초지식을 정리한 책이다. 현장 중심으로 자바의 기본서 product.kyobobook.co.kr 1장. 프로그래밍이란 무엇인가? 직접해봅시다. public class Calculator { public int subtract(int num1, int num2) { return num1 - num2; } public int multiply(int num1, int num2) { return num1 * num2; } public int divide(int num1, int num2) { return num1 / num2; } } 정리해..

공부/Spring

스프링부트 3.X 스프링 시큐리티 JWT 토큰 기능 구현하기

Spring Boot 3.0.2 version 기준입니다. (Spring Boot 3.1.0까지 실행 확인) 이전 글 아래 포스팅과 이어지는 글입니다. 스프링부트 3.X 스프링 시큐리티 사용해서 회원가입, 로그인, 로그아웃 구현하기 스프링 시큐리티? 스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 인증(Authentication)? 인증은 사용자의 신원을 입증하는 과정이 devhan.tistory.com JWT? JWT는 JSON Web Token의 줄임말이다. JWT는 토큰 기반 인증을 지원한다. 토큰 기반 인증은 말 그대로 토큰을 사용하는 방법인데, 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이다. 서버에서 토큰을 생성해서 클라이..

공부/Java

JVM과 좀 친해져보자. JVM Architure

JVM이란? JVM은 Java를 공부했었던 사람이라면 뭔지 모를 수가 없는 존재일 것이다. JVM은 Java Virtual Machine으로 한국어로는 자바 가상 머신(기계)이다. 대부분 JVM을 들어 본 사람이라면 Java를 컴파일을 위해 사용하는 정도, 또 가비지 컬렉터(Garbage Collector)를 돌려주는 정도로만 알고 있을 것이다(나도 그렇다). 오늘 바로 이 JVM을 완전히 깊게는 아니고 조금 더 딥하게 파헤쳐 보자. 정확히 JVM이 하는 일이 뭐야? JVM이 하는 일은 놀랍게도 정답이 벌써 나왔다. 바로 Java Application을 컴퓨터에서 실행할 수 있도록, 즉 컴파일할 때 사용한다. JVM이 여타 다른 C 언어나 C++, Python과 다르게 좀 특이한 점은 온갖 해석 방법을 ..

공부/Spring

토비의 스프링 부트 - 자동 구성 기반 애플리케이션_1

메타 애노테이션과 합성 애노테이션 @UnitTest 애노테이션 생성 @Test 메서드가 붙어있는 simpleHelloService()의 애노테이션을 @UnitTest 애노테이션으로 변경해보자. 물론 새로 생성해줘야한다. @UnitTest void simpleHelloService() { SimpleHelloService helloService = new SimpleHelloService(); String ret = helloService.sayHello("Test"); Assertions.assertThat(ret).isEqualTo("Hello Test"); } @Test void helloDecorator() { HelloDecorator decorator = new HelloDecorator(nam..

알고리즘/알고리즘 유형

[백준] 17298_오큰수 - JAVA

백준_17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 스택 참고 포스팅 [백준] 1874_스택 수열 - JAVA 백준_1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc. devhan.tistory.com 코드 import java.io..

알고리즘/알고리즘 유형

[백준] 1874_스택 수열 - JAVA

백준_1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 스택(Stack) 삽입과 삭제 연산이 후입선출(LIFO : Last-in First-out)으로 이루어진 자료구조이다. 후입선출은 산입과 삭제가 한 쪽에서만 이루어진다. 스택 용어 top : 삽입과 삭제가 일어나는 위치 push : top 위치에 새로운 데이터를 삽입하는 연산 pop : top 위치에 현재 있는 데이터를 삭제하고 확인하는 연산 peek : top 위치..

알고리즘/알고리즘 유형

[백준] 11003_최솟값 찾기 - JAVA

백준_11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 덱(deque) 위 문제는 슬라이딩 윈도우와 정렬을 사용하면 될 것 같지만 정렬은 nlog(n)의 시간 복잡도를 가지고, N과 L의 범위가 5,000,000인 이 문제에서는 정렬을 사용할 수 없다. O(n)의 시간 복잡도로 해결해야 한다. 정렬 대신 슬라이딩 윈도우와 덱(deque)이란 자료구조를 사용하면 이 문제를 풀 수 있다. 덱은 양 끝에서 데이터를 삽입하거나 삭제할 수 있는 자료구조이다. 왼쪽에서는 addFi..

공부/Spring

토비의 스프링 부트 - DI와 테스트, 디자인 패턴

테스트 코드를 이용한 테스트 여태 코드를 작성하면 서버를 재실행하고 인텔리제이 터미널에서 HTTPie로 테스트를 진행했다. 이렇게 사람이 수동으로 테스트를 하는 것보다 테스트 코드를 작성해서 사람보다는 기계?가 테스트하는 게 훨씬 시간도 절약되고 정확성이 높다. HelloApiTest.java public class HelloApiTest { @Test void helloApi() { } } 내용이 빈 메서드를 만들고 실행해보면 테스트가 통과되었다는 표시가 뜬다. 검증할 내용이 없어 테스트가 통과되지 않는 상황이 없기에 몇 번을 돌려도 테스트는 통과된다. TestRestTemplate.java @Test void helloApi() { // http localhost:8080/hello?name=Spri..

알고리즘/알고리즘 풀이

[프로그래머스_1] 소수 찾기 JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int[][] sizes) { int answer = 0; int w = 0; int h = 0; int maxW = 0; int maxH = 0; for(int i = 0; i < sizes.length; i++) { w = Math.max(sizes[i][0], sizes[i][1]); h = Math.min(sizes[i][0], sizes[i][1]); sizes[i][0] = w; sizes..

공부/Spring

토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-2

스프링 컨테이너로 통합 현재 코드는 스프링 컨테이너를 만들고 서블릿을 초기화하는 작업을 스프링 컨테이너가 초기화되는 과정 중에 일어나도록 코드를 변경해보자. 이유는 스프링부트가 그렇게 사용하고 있다. 스프링 컨테이너의 초기화 작업은 refresh()에서 일어난다. applicationContext.refresh(); refresh() 전에 호출되는 onRefresh()를 사용하려면 GenericWebApplicationContext를 상속받아서 오버라이딩 해야한다. 클래스를 따로 만들기보다는 익명 클래스를 사용하여 오버라이딩 한다. public class HellobootApplication { public static void main(String[] args) { GenericWebApplicatio..

공부/Spring

토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-1

스프링 컨테이너 사용 기존 소스 코드 정리 FrontController의 로직 중 'else if~' 구문 삭제 HTTP Status Code 세팅 코드 삭제 (에러가 나지 않는 한 알아서 200 OK 코드가 붙어 나간다.) 즉, 생략가능 HTTP Header에 세팅한 Content-Type 부분 setContentType() 메서드로 변경. 이러면 header ID를 생략하고 값만 넣으면 됨 public class HellobootApplication { public static void main(String[] args) { TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); // 다양한 서버 프로그램을 ..

알고리즘/알고리즘 풀이

[프로그래머스_1] 소수 찾기 JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE(기본) class Solution { public int solution(int n) { int answer = 0; boolean flag = true; for(int i = 2; i

알고리즘/알고리즘 풀이

[프로그래머스_1] 소수 만들기 JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public int solution(int[] nums) { int answer = 0; Arrays.sort(nums); for(int i = 0; i < nums.length; i++) { for(int j = i+1; j < nums.length; j++) { for(int k = j+1; k < nums.length; k++) { int result = isPrime(nums[i], nums[j], nums[k]); answer..

알고리즘/알고리즘 풀이

[프로그래머스_1] 숫자 짝꿍 JAVA

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr CODE import java.util.*; class Solution { public String solution(String X, String Y) { StringBuilder answer = new StringBuilder(); int[] xCntArr = new int[10]; int[] yCntArr = new int[10]; for(String x : X.split("")) { xCntArr[Integer.parseInt(x)]++; } for(String y : Y.split("")) { yCnt..

데부한
'Java' 태그의 글 목록