본문 바로가기

전체 글94

[DailyLog] package org.springframework.beans.factory.annotation does not exixt 상황 인텔리제이로 작업 중이었던 프로젝트가 갑자기 실행이 안되고 다음과 같이 빨간줄 천지가 되었다. package org.springframework.beans.factory.annotation does not exist cannot find symbol class Bean 해결 1 IntelliJ 상단 메뉴 중 Build에서 Rebuild Project를 클릭하여 프로젝트를 새로 빌드한다. 해결 2 우측 Gradle 창에서 프로젝트에 우클릭 후 Refresh Gradle Dependencies를 클릭한다. 2024. 2. 15.
[DaliyLog] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 상황 새 프로젝트를 진행하면서 Jpa와 MySQL을 연동하는 중 다음과 같은 경고가 떴다. WARN 8604 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 해결 SpringBoot는 기본적으로 spring.jpa.open-in-view이 true로 설정되어 있고, 랜더링 중에 database 쿼리가 실행될 수 있다고 한다. 그러므.. 2024. 2. 5.
[Java] char 배열을 문자열로 변환 String(배열명) public class Main { public static void main(String[] args) { char[] arr = {'I','a','m','사','랑','이','에','요'}; String result = new String(arr); System.out.println("result = " + result); } } // result = Iam사랑이에요 char 배열이 있다면 반복문을 쓰지 않고 문자열로 합성하는 법이 있다. String(배열 이름)을 하면 한 번에 문자열로 만들어준다. 2023. 11. 28.
[Java] 절대값 구하기 Math.abs( ) Math.abs( ) int, long, double, float 타입을 입력받아 절대값을 반환한다. public class Main { public static void main(String[] args) { int num1 = -3; long num2 = -534978333; double num3 = -3.235; float num4 = -1.234f; System.out.println("Math.abs(num1) = " + Math.abs(num1)); System.out.println("Math.abs(num2) = " + Math.abs(num2)); System.out.println("Math.abs(num3) = " + Math.abs(num3)); System.out.println("Mat.. 2023. 11. 22.
[Java] long 범위보다 큰 정수를 사칙연산하기: BigInteger BigInteger int, double, long 자료형 중에서 가장 범위가 넓은 long의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807이다. 만약 long의 범위를 초과하는 수를 다룰 때는 BigInteger 클래스를 사용할 수 있다. BigInteger는 문자열로 표현된 숫자를 입력받아 객체를 생성한다. 이후 사칙연산을 수행하는 각 메서드를 호출하여 다음과 같이 활용할 수 있다. import java.math.BigInteger; public class Main { public static void main(String[] args) { String a = "12938475029384752983749875"; String b = "2398.. 2023. 11. 10.
[Java] 문자열을 공백 기준으로 나누어 배열 만들기: split( ), 마지막 공백 처리 공백을 기준으로 배열 만들기 public class Main { public static void main(String[] args) { String my_string = "i love you"; String[] arrStr = my_string.split(" "); String my_string2 = "a, b, c"; String[] arrStr2 = my_string2.split(","); System.out.println(Arrays.toString(arrStr)); System.out.println(Arrays.toString(arrStr2)); } } // [i, love, you] // [a, b, c] split( ) 메서드를 이용하면 괄호 안의 값을 기준으로 문자열을 나눌 수 있다. 마지.. 2023. 11. 4.
[Spring] 여러가지 의존관계 주입 방식 생성자 주입 방식 4가지 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 의존관계 주입 방식은 위와 같이 4가지가 있다. 각각의 방식을 알아보고 생성자 주입 방식을 왜 써야하는지 알아본다. 생성자 주입 생성자를 통해서 의존관계를 주입받는 방식이다. 가장 대중적으로 쓰이고 선호되는 방식이다. 생성자 주입 방식은 생성자를 호출하는 시점에 딱 1번만 호출되는 것이 보장된다. 처음 주입이 이뤄지고 난 후에는 변경사항이 없다는 것이다. 생성자 주입 방식은 또한 필수적인 의존관계에 사용되는 방식이다. 다음 OrderServiceImpl 클래스 코드를 보자. @Component public class OrderServiceImpl implements OrderService { private .. 2023. 11. 3.
[Spring] 싱글톤을 관리하는 스프링 컨테이너 싱글톤 컨테이너 역할을 하는 스프링 컨테이너 스프링 컨테이너는 기존 싱글톤 패턴의 문제점을 해결하고 객체 인스턴스를 한 개만 생성하여 관리한다. 잘 알고 있는 스프링 빈이 스프링 컨테이너에 의해 싱글톤으로 관리된다. 스프링 컨테이너 싱글톤 객체를 관리하므로 여러 장점이 있는데, 먼저 싱글톤 패턴을 위해서 코드를 작성하지 않아도 된다는 점이다. 그리고 앞서 싱글톤 패턴의 문제점으로 말했던 DIP, OCP, 테스트, private 생성자로부터 제한없이 싱글톤을 사용할 수 있다. @Test void springContainer() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memb.. 2023. 11. 2.
[Spring] 싱글톤 패턴(Singleton Pattern) 요청 시 객체를 생성하는 구조 웹 어플리케이션이 있다. 고객들이 요청할 때마다 AppConfig(스프링 없는 순수한 DI 컨테이너)는 객체를 새로 생성할 것이다. 100개의 요청이 들어오면 100개의 객체가 생성이 되고 소멸 될 것이다. 이 서비스가 인기가 더 많아지면 초당 10,000개 이상의 객체를 생성하고 소멸될 수도 있다. 다음은 스프링이 없는 순순한 DI 컨테이너를 나타낸 코드이다. public class SingletonTest { @Test void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); MemberService memberSe.. 2023. 11. 1.
[Java] ArrayList에서 특정 값 인덱스 구하기 indexOf 배열에서는 indexOf()가 지원이 안된다. 배열에서 특정 값 인덱스를 구하려면 asList()를 이용하여 ArrayList로 변환하는 방법이 있다. indexOf( ) import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] arr = {"apple", "banana", "graph"}; List list = Arrays.asList(arr); System.out.println(list.indexOf("banana")); // 1 } } 2023. 10. 30.
[Memory] 내가 쓰는 IntelliJ 단축키 2(Update) CTRL + SHIFT + T : 테스트 클래스 자동 생성 테스트 클래스 뿐만 아니라, 패키지까지 자동 생성 해준다. ALT + ENTER : import static 예를 들어 Assertions를 사용할 때, import static을 하면 다음부턴 Assertions.를 생략할 수 있다. "iter" + tab : for 문 자동 생성 리스트나 배열이 있으면 for 문을 자동으로 생성해준다. 2023. 10. 28.
[Spring] SOLID 좋은 객체 지향 설계의 5가지 원칙 SOLID 좋은 객체 지향 설계의 5가지 원칙 클린 코드의 저자로 유명한 로버트 마틴이 정리한 좋은 객체 지향 설계의 5가지 원칙이다. 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 개발하고자 하는 프로그래머들은 이 원칙들을 적용할 수 있다. SRP (Single Responsibility Principle) : 단일 책임 원칙 OCP (Open/Closed principle) : 개방/폐쇄 원칙 LSP (Liskov Substitution Principle) : 리스코프 치환 원칙 ISP (Interface Segregation Principle) : 인터페이스 분리 원칙 DIP (Dependency Inversion Principle) : 의존관계 역전 원칙 SRP 단일 책임 원칙 (Single R.. 2023. 10. 27.
[Java] Integer 타입 ArrayList를 int 타입 배열로 변환 주저리주저리 코딩테스트 연습 중 int형 배열을 정답으로 반환해야 하는 상황. 필자는 매번 Integer 타입의 ArrayList를 반환하여 'cannot be converted to int'라는 오류를 만난다. 그만 까먹고 싶어서 기록한다. 본론 List list = new ArrayList(); list.add(1); list.add(2); int[] arr = list.stream() .mapToInt(i -> i) .toArray(); Integer타입 ArrayList를 선언하고 데이터를 삽입한다. 그 이후 list를 stream으로 변환한 후 mapToInt와 toArray()를 이용하여 int형 배열로 만든다. 2023. 10. 26.
[Memory] 내가 쓰는 IntelliJ 단축키 CTRL + P : 괄호 값 안내 괄호에 빨간 밑 줄이 그어져있다면 ctrl + P를 눌러서 인자 값을 확인할 수 있다. CTRL + ALT + V : 해당 메소드의 변수 데이터 타입 추출 Optional, List 등 선언을 바로 해준다. CTRL + ALT + M : 메서드 추출 ALT + ENTER : 람다식으로 변경 CTRL + ALT + N : inLine 하나의 라인으로 만들어준다. ALT + INSERT : 생성자(Generate) 자동 생성 Generate 창을 열어 생성자를 손쉽게 자동 생성할 수 있다. Getter & Setter 등 다른 기능들도 자동 생성할 수 있다. 2023. 10. 25.
[DailyLog] Windows Hello 지문과 호환되는 지문 스캐너를 찾을 수 없습니다. 상황 필자는 삼성전자 갤럭시북 이온 NT950XCR-A58A를 사용하고 있다. 노트북 로그인 시 평소에 잘 되던 지문 인식이 안되어 로그인 옵션에 갔더니 Windows Hello 뭐시기 오류가 떠있는 것을 확인했다. 구글링을 해보니 삼성전자 노트북 뿐만 아니라 Windows 기반인 많은 노트북들이 고통을 받고 있는 것을 확인했다. 여러 방법을 한 결과 지문 인식 되살리는데 성공했고, 그 해결 방법을 남기려고 한다. 해결 먼저 장치 관리자를 검색한다. 상단 메뉴 보기에서 숨겨진 장치 표시를 클릭한다. 생체 인식 장치를 찾아본다. 필자는 CanVasBio Fingerprint Driver을 확인할 수 있는데 기기마다 다른 드라이버가 있을 것 같다. 이 드라이버를 더블 클릭한다. 상단 메뉴 드라이버를 클릭 후.. 2023. 10. 24.
[BOJ] 백준 1874번: 스택 수열 (Java) 문제링크 https://www.acmicpc.net/problem/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 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Stack; public class Main{ public static void main(String[.. 2023. 4. 4.
[BOJ] 백준 1654번: 랜선 자르기 (Java) 문제링크 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOExc.. 2023. 4. 3.
[BOJ] 백준 1436번: 영화감독 숌 (Java) 문제링크 https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(ne.. 2023. 4. 2.
[BOJ] 백준 1259번: 팰린드롬수 (Java) 문제링크 https://www.acmicpc.net/problem/1259 1259번: 팰린드롬수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStr.. 2023. 4. 1.
[BOJ] 백준 1181번: 단어 정렬 (Java) 문제링크 https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Arrays; import java.util.Comparator; public class Main{ public static void main(String[] args) th.. 2023. 3. 31.
[BOJ] 백준 1018번: 체스판 다시 칠하기 (Java) 문제링크 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static boolean[][] arr; public static int min = 64; publ.. 2023. 3. 30.
[BOJ] 백준 1085번: 직사각형에서 탈출 (Java) 문제링크 https://www.acmicpc.net/problem/1085 1085번: 직사각형에서 탈출 한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOExceptio.. 2023. 3. 29.
[BOJ] 백준 2920번: 음계 (Java) 문제링크 https://www.acmicpc.net/problem/2920 2920번: 음계 다장조는 c d e f g a b C, 총 8개 음으로 이루어져있다. 이 문제에서 8개 음은 다음과 같이 숫자로 바꾸어 표현한다. c는 1로, d는 2로, ..., C를 8로 바꾼다. 1부터 8까지 차례대로 연주한다면 ascending, 8 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throw.. 2023. 3. 28.
[BOJ] 백준 2742번: 기찍 N (Java) 문제링크 https://www.acmicpc.net/problem/2742 2742번: 기찍 N 자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.io.BufferedWriter; import java.io.OutputStreamWriter; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedRead.. 2023. 3. 27.
[BOJ] 백준 2741번: N 찍기 (Java) 문제링크 https://www.acmicpc.net/problem/2741 2741번: N 찍기 자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br... 2023. 3. 26.
[BOJ] 백준 2577번: 숫자의 개수 (Java) 문제링크 https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));.. 2023. 3. 25.
[BOJ] 백준 2475번: 검증수 (Java) 문제링크 https://www.acmicpc.net/problem/2475 2475번: 검증수 컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들 www.acmicpc.net 나의코드 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int sum = 0; for(int i = 0; i < 5; i++){ int num = sc.nextInt(); sum += num * num; } Syste.. 2023. 3. 24.
[BOJ] 백준 2908번: 상수 (Java) 문제링크 https://www.acmicpc.net/problem/2908 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader .. 2023. 3. 23.
[BOJ] 백준 5622번: 다이얼 (Java) 문제링크 https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String word = br.. 2023. 3. 22.
[BOJ] 백준 1152번: 단어의 개수 (Java) 문제링크 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 나의코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.io.IOException; public class Main{ public static void main(String[] args) throws IOException{ Buffe.. 2023. 3. 21.