본문 바로가기

전체 글43

[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] 백준 10871번 X보다 작은 수 (Java) 문제링크 https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net 나의코드 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int X = sc.nextInt(); int[] arr = new int[N]; for(int i = 0;.. 2023. 2. 1.
[BOJ] 백준 10807번 개수 세기 (Java) 문제링크 https://www.acmicpc.net/problem/10807 10807번: 개수 세기 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거 www.acmicpc.net 나의코드 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] array = new int[num]; int count = 0; for(int i = 0; i .. 2023. 1. 31.
[BOJ] 백준 1110번 더하기 사이클 (Java) 문제링크 https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net 나의코드 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); sc.close(); int a = num; int count = 0; while(true){ a = ((.. 2023. 1. 30.
[도메인 주도 개발 시작하기] Chapter 2. 아키텍처 개요 2.1 네 개의 영역 '표현', '응용', '도메인', '인프타스트럭처'는 아키텍처를 설계할 때 출현하는 전형적인 네 가지 영역이다. 표현 영역은 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할을 한다. 스프링 MVC 프레임워크가 표현 영역을 위한 기술에 해당한다. 웹 애플리케이션의 표현 영역은 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해서 응용 영역에 적달하고 응용 영역의 응답을 HTTP 응답으로 변환하여 전송한다. 표현 영역을 통해 사용자의 요청을 전달받은 응용 영역은 시스템이 사용자에게 제공해야 할 기능을 구현하는데 '주문 등록', '주문 취소', '상품 상세 조회'와 같은 기능 구현을 예로 들 수 있다. 응용 서비스는 로직을 직접 수행.. 2023. 1. 13.
[도메인 주도 개발 시작하기] Chapter 1. 도메인 모델 시작하기 1.1 도메인이란? 도메인은 소프트웨어로 해결하고자 하는 문제 영역을 말한다. 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어 온라인 서점이라는 도메인은 주문, 배송, 혜택 등 하위 도메인으로 나눌 수 있다. 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공해야 할 모든 기능을 직접 구현하는 것은 아니다. 예를 들어 온라인 쇼핑몰이 외부 배송 업체의 시스템을 사용하고 배송 추적 정보를 제공하는 데 필요한 기능만 일부 연동하는 것처럼 말이다. 결제 시스템도 직접 구현하기보다는 결제 대행업체를 이용해서 처리할 경우가 많다. 1.2 도메인 전문가와 개발자 간 지식 공유 온라인 홍보, 정산, 배송 등 각 영역에는 전문가가 있다. 전문가들은 해당 도메인에 대한 지식과 경험을 바탕으로 본인들이 원하.. 2023. 1. 12.
[BOJ] 백준 2753번 윤년 (Java) 문제링크 https://www.acmicpc.net/problem/2753 2753번: 윤년 연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오. 윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다. 예를 들어, 2012년은 4의 배수이면서 www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); sc.close(); if(a % 400 == 0){ System.out.print("1"); }else if((a % 4 =.. 2022. 12. 29.
[DailyLog] A problem occurred configuring root project 'hello-spring'. 상황 Spring Initializr에서 프로젝트 생성 후 IntelliJ에서 실행을 했더니 다음과 같은 무시무시한 오류가 떴다. 더보기 A problem occurred configuring root project 'hello-spring'. > Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.0.0. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.0.0 > No matching variant of o.. 2022. 12. 15.
[BOJ] 백준 9498번 시험 성적 (Java) 문제링크 https://www.acmicpc.net/problem/9498 9498번: 시험 성적 시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오. www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); sc.close(); if(a >= 90){ System.out.print("A"); }else if(a >= 80){ System.out.print("B"); .. 2022. 11. 17.
[BOJ] 백준 1330번 두 수 비교하기 (Java) 문제링크 https://www.acmicpc.net/problem/1330 1330번: 두 수 비교하기 두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오. www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); sc.close(); if(a > b){ System.out.print(">"); } else if(a == b){ System.out.print("=="); }else if(a < b){ System.out.. 2022. 11. 16.
[BOJ] 백준 25083번 새싹 (Java) 문제링크 https://www.acmicpc.net/problem/25083 25083번: 새싹 아래 예제와 같이 새싹을 출력하시오. www.acmicpc.net 나의코드 public class Main{ public static void main(String[] args){ System.out.printf(" ,r'\"7\nr`-_ ,' ,/\n \\. \". L_r'\n `~\\/\n |\n |"); } } 2022. 11. 15.
[BOJ] 백준 10172번 개 (Java) 문제링크 https://www.acmicpc.net/problem/10172 2022. 11. 14.
[BOJ] 백준 10171번 고양이 (Java) 문제링크 https://www.acmicpc.net/problem/10171 10171번: 고양이 아래 예제와 같이 고양이를 출력하시오. www.acmicpc.net 나의코드 public class Main{ public static void main(String[] args){ System.out.print("\\ /\\\n ) ( \')\n( / )\n \\(__)|"); } } 2022. 11. 13.
[BOJ] 백준 2588번 곱셈 (Java) 문제링크 https://www.acmicpc.net/problem/2588 2588번: 곱셈 첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다. www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a, b, c, d, e; a = sc.nextInt(); b = sc.nextInt(); sc.close(); c = a * (b % 10); d = a * (b % 100 / 10); e = a * (b / 100); System.out.println(c); System.. 2022. 11. 12.
[BOJ] 백준 10430번 나머지 (Java) 문제링크 https://www.acmicpc.net/problem/10430 10430번: 나머지 첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000) www.acmicpc.net 나의코드 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); sc.close(); System.out.println((a + b) % c); System.out.println(((a % c) + (b % c)) % c); Sy.. 2022. 11. 11.
[BOJ] 백준 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰 (Java) 문제링크 https://www.acmicpc.net/problem/3003 3003번: 킹, 퀸, 룩, 비숍, 나이트, 폰 첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다. www.acmicpc.net 나의코드 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int king = 1; int queen = 1; int rook = 2; int bishop =2; int knight = 2; int pawn = 8; System.out.print.. 2022. 11. 10.