본문 바로가기

전체 글243

[Spring] Ioc Container 와 Bean 빈 (Bean): Spring이 관리하는 객체Spring IoC 컨테이너: *Bean*을 모아둔 컨테이너 @Component 를 클래스 위에 붙여주면 첫 번째 대문자가 소문자로 바뀐 memoService 이름으로 Bean 저장됨  @AutowiredSpring IoC 컨테이너에 의해 관리되는 클래스에서만 가능합니다. 필드 위에 @Autowired   'Bean'을 주입할 때 사용할 메서드 위에 @Autowired객체의 불변성을 확보할 수 있기 때문에 일반적으로는 생성자를 사용하여 DI하는 것이 좋음set… Method를 만들고 @Autowired를 적용하여 DI 할 수도 있음생성자 선언이 1 개라면 생략 가능ApplicationContextApplicationContext는 BeanFactory등을 상속.. 2024. 8. 19.
[Spring] Ioc (제어의 역전) 와 DI (의존성 주입) IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF 의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴 강하게 결합되어 있는 Consumer 와 Chicken코드는 정상적으로 작동하겠지만, Consumer 가 chicken 이 아니라 pizza 가 먹고싶다면 코드 수정이 불가피함 약하게 결합되어있는 Consumer 와 Chicken, Pizzainterface 다형성의 원리를 사용해서 고객이 어떤 음식을 요구하더라도 쉽게 대처할 수 있음.그럼 여기에 어떻게 주입할까?1. 필드에 직접 주입2. 메서드를 통한 주입3. 생성자를 통한 주입 필드에 직접 주입Food를 Consumer에 포함 시키고 Food에 필요한 객체를 주입받아 사용 메서드를 통한 주입set 메서드를 사용하여 필요한 객체를 주입받아 사용 .. 2024. 8. 16.
[Memo][Java] Timestamp, BIGINT, DATE() sql type 에서int: 일반적으로 32비트 정수를 나타내며, 범위는 -2^31부터 2^31-1까지입니다. 이는 약 -21억에서 21억 사이의 숫자를 포함bigint: 64비트 정수를 나타내며, 훨씬 더 큰 숫자를 저장 ( Long 타입 저장 )type 선언 시 varchar 뒤에는 꼭 () 안에 크기를 넣어줘야함. 255 500 등import java.sql.Timestamp;this.createdDate = new Timestamp(System.currentTimeMillis());두 코드를 통해 현재 시간을 java 에서 저장시킬 수 있다.DATE(updated_date)는 updated_date 필드의 날짜 부분만 비교합니다. 이렇게 하면 시간 부분을 무시하고 날짜만 비교할 수 있습니다. 2024. 8. 16.
[SQL] DDL, DCL, DML DDLDCLDML 2024. 8. 13.
[Spring] CRUD DTO(Data Transfer Object) 데이터 전송 및 이동을 위해 생성되는 객체Client  에서 보내오는 데이터를 객체로 처리할 때 사용서버의 계층간의 이동에도 사용DB 와의 소통을 담당하는 java 클래스를 그대로 Client 에 반환하는 것이 아니라 DTO 로 한 번 변환 후 반환할 때 사용( Request 의 데이터 처리 담당 객체명은 RequestDto, Response 할 때 사용되는 객체는 ResponseDto )CREATEClient 에 데이터를 반환하고 Client 의 요청 데이터를 받아줄 MemoResponseDto, MemoRequestDto 클래스 생성 지금은 DB 연결을 하지 않았기 때문에 메모 데이터를 저장할 컬렉션 생성 READUPDATEDELETE 2024. 8. 13.
[Spring] PathVariable, RequestParam, ModelAttribute, RequestBody Client (브라우저) 에서 서버로 HTTP 요청을 보낼 때 데이터를 함께 보내는 방식에는 여러 방식이 있다. 아래의 hello-request-form.html 을 우선 불러왔다. @PathVariable서버에 보내려는 데이터를 URL 경로에 추가해서 보낼 수 있다.데이터를 받기 위해서는 /star/{name}/age/{age} 이처럼 URL 경로에서 데이터를 받고자 하는 위치의 경로에 {data} 중괄호를 사용(@PathVariable String name, @PathVariable int age)그리고 해당 요청 메서드 파라미터에 @PathVariable 애너테이션과 함께 {name} 중괄호에 선언한 변수명과 변수타입을 선언하면 해당 경로의 데이터를 받아옴@RequestParamform 태그 GET.. 2024. 8. 13.
[Spring] 데이터를 Client 에 반환, Jackson 라이브러리 템플릿 엔진이 적용된 SpringBoot 에서 Controller 에서 문자열을 반환하면 templates 폴더에서 해당 문자열의 html 파일을 찾아서 반환해줌 따라서 html 파일이 아닌 JSON 데이터를 브라우저에 반환하려면 해당 메서드에 @ResponseBody 애너테이션을 추가해줘야함 1. 반환값 : StringJava는 JSON 타입을 지원하지 않기 때문에 JSON 형태의 String 타입으로 변환해서 사용해야 함 2. 반환값 : String 외 자바 클래스"자바 객체 → JSON 으로 변환"Spring 에서 자동으로 Java 의 객체를 JSON 으로 변환해줌@RestController 을 사용하면 @ResponseBody 를 전부 생략하고 해당 클래스 전체를 데이터를 전달하는 클래스로 만들 .. 2024. 8. 12.
[Spring] Controller, 정적 페이지와 동적 페이지 Controller 패턴이 적용되어있지 않았다면 위의 4가지 API 를 처리하기 위해 3개의 클래스를 만들어야했을 것 API 마다 파일을 만들 필요가 없음 유사한 성격의 API 를 하나의 Controller 로 관리( @RequestMapping 사용 ) 메서드 이름 내 마음대로 설정 가능 ( 클래스 내의 중복 메서드명 불가 )정적페이지의 기본은 static 폴더에 정적 페이지 hello.html 을 만들고 그냥 주소창에 /hello.html 로 접속시키면 바로 연결된다.이를 Controller 에서 연결시키고 싶다면implementation 'org.springframework.boot:spring-boot-starter-thymeleaf’해당 dependency를 주석 처리해야 테스트가 가능 thym.. 2024. 8. 12.
[알고리즘][Java] 정수 제곱근 판별, 오버플로우 class Solution { public long solution(long n) { for(long x = 1; x*x 정수의 제곱근을 판별하는 문제에서의 포인트 1. 오버플로우n 의 제곱근인 x 라면 굳이 long 타입으로 선언해주어야할까?int 로 x 를 선언해주었을 때(int 변수) * (int 변수) 의 결과가 (int 변수) 의 범위를 초과하면 오버플로우가 발생할 수 있음.예를 들어, int 의 최대값인 2,147,483,647 에 1을 더하면 -2,147,483,648로 변환됨 2. 필요없는 계산 줄이기기존에 반복문의 범위를 x근데 어차피 x*x 가 n 보다 넘어간다면 더 이상 제곱근이 될 수가 없기 때문에이를 미리 생각해서 필요없는 계산을 사전에 없애서 성능 향상을 기대해.. 2024. 8. 12.
[Spring] Gradle, Lombok Gradle빌드 자동화 시스템우리가 작성한 Java 코드를 설정에 맞게 자동으로 Build 해줌소스 코드를 실행 가능한 결과물로 만드는 일련의 과정을 뜻함Gradle 을 사용해 간편하게 Java 소스 코드를 실행 가능한 jar 파일로 만들어줌Lombok자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/ 생성자 등을 자동으로 생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리 @Getter  @Setter @Setter, @Getter 롬복을 달아주면 자동으로 setter, getter 메소드가 생성된다.@NoArgsConstructor  @AllArgsConstructor@NoArgsConstructor 롬복은 기본생성자를,@AllArgsConstructor 롬복은 모든 필드를 파라미터로 .. 2024. 8. 11.
[내배캠] Java Project 22조 내배캠 회원관리 프로젝트 KPT 회고 KPT 회고KEEP, 다음 프로젝트로 가져갈· 여러 문제들을 직면했어도 끝까지 포기하지 않고 프로젝트를 완성시킨 점 · 깃허브를 이용해서 체계적으로 브랜치를 관리했던 점 · 못한다고 서로 질책하지 않은 점 · 진행 중에 같이 알면 좋을 부분을 알게되면 부담없이 바로 공유했던 점· 코딩 중 어려움이 찾아왔을 때 서로 도와주려고 노력한 점· 회의를 통해 팀원들이 서로 의견을 취합하고 소통하려고 노력한 점 ·  클래스를 구성하기 전 먼저 주석으로 어떤 메서드들이 필요하고 , 어떤 필드들이 필요할 지 설계한 점 ·  Github PR을 사용하여 혹시 모를 병합 과정 속에 코드 손실을 막기 위해서 팀원들과 병합을 토의하고 승인한점 ·  푸시를 하고 깃헙 저장소에서 확인 후 병합을 실행한점   PROBLEM, 버.. 2024. 8. 8.
[알고리즘] [Java] String → Int 변환, Integer.parsInt(), char - '0' Integer.parseInt(), Integer.valueOf()class Solution { public int solution(String s) { int answer = Integer.parseInt(s); return answer; }}String 타입의 변수를 숫자로 변환하기 위해 아래 두 방법을 알아봤다.int num = Integer.parseInt(str);String 타입의 num 을 int 타입으로 변환int num = Integer.valueOf(str);String 타입의 num 을 Integer 타입으로 변환앞에 부호 +,- 를 사용해도 int 안으로 정상적으로 들어간다. char - '0'public class StrToInt { pub.. 2024. 8. 8.
[알고리즘] [Java] 정수를 문자열로 바꾸기, 타입 변환하기 class Solution { public int[] solution(long n) { String i = Long.toString(n); int[] answer = new int[i.length()]; for (int j = 0; j  이번 알고리즘 문제를 풀면서 알게된 부분을 정리해보려고 한다. 1) 배열을 선언하기 위해서는 배열 크기를 먼저 지정을 해야했다. 하지만 입력되는 값에 따라 크기가 바뀌기 때문에 이를 어떻게 하면 될지 문제가 생겼다. String i = Long.toString(n); 입력받은 long 타입의 n 정수를 Long.toString 안에 넣어서 String i 변수 안에 넣어줌으로서 "정수" 를 "문자열" 로 바꿀 수 있었다. int.. 2024. 8. 7.
[Java] Collection 과 Wrapper 객체 java 의 interface 란?실제 구현은 인터페이스 내부에 없음가장 추상화된 개념의 명세추상적인 타입의 역할을 함실제로 인터페이스를 구현하는 구현체들의 행동 양식을 정해줌다중 상속을 구현할 수 있게 함결론적으로 추상적인 타입의 역할을 하면서 해당 타입의 구현체들의 행동 양식이나 특성을 지정해주는 역할을 함 List, 배열 List 는 추상적 자료구조, 순서를 가지고 일렬로 나열한 원소들의 모임 ( 순서가 있고 중복 허용 부분에서 집합(Set) 과 구별 )순서를 가지고 저장되어 있어서 검색 접근이 쉽지만 추가, 삭제가 매우 느림하지만 가장 끝과 가장 처음에 추가되는 Stack, Queue 는 순서를 유지하기 때문에 빠름 Wrapper 객체char, int, long과 같은 것들은 실제로 “값” 이상의.. 2024. 8. 5.
[Java] Generic 제네릭의 효용타입 언어에서 중복되거나 필요없는 코드를 줄여주고, 그러면서 타입 안정성을 해치지 않는다. 파이썬, 자바스크립트와는 다르게 Java 는 타입을 지정해줘야한다. 같은 함수더라도 타입에 따라 세 차례나 구현해야함. 제네릭 문법1. 제너릭은 클래스 또는 메서드에 사용 가능, 클래스 이름 뒤에 문법 안에 들어가야할 타입 변수 지정 ( T 는 컨벤션 )2. 선언해둔 타입 변수는 해당 클래스 내에서 특정한 타입이 들어갈 자리에 대신 들어갈 수 있음3. 메서드의 리턴 타입에 들어가는 것 역시 마찬가지다. 4. 제너릭을 통해 구현한 클래스를 사용하는 부분.클래스에 선언했기 때문에 인스턴스를 만들기 위해서 타입 변수에 들어갈 실제 변수의 값을 넣어줘야함. ( String 으로 넣어준 모습 ) 5. 타입변수.. 2024. 8. 4.