반응형

전체 글 135

[Spring - DB] 1. JDBC 이해

본 글은 Spring Database 관리에 관한 강의를 수강한 후 작성한 정리입니다. JDBC, Java Database Connectivity를 통해 다양한 Database 들을 사용함에도 불구하고 일관된 접근을 할 수 있게 되었다는 점이 인상적입니다. 1. JDBC 이해 Java Database Connectivity 클라이언트, 즉 브라우저는 보통 애플리케이션에 특정 작업이나 리소스를 요청하고, 애플리케이션 서버가 데이터베이스에 접근한다. 애플리케이션 서버가 데이터베이스를 사용하기 위해서 진행하는 절차 1. 커넥션 연결 : 주로 TCP/IP 사용 2. SQL 전달 : 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 커넥션을 통해 DB 로 전달 3. 결과 응답 예전에는 데이터베이스마다 위의 방법..

개발/java 2024.01.07

[Spring 기본] 6. 의존관계 자동 주입

생성자 수정자 (setter) 필드 주입 메소드 주입 생성자 주입 사용하기 추천 final 키워드와 함께 사용 생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있다. 그래서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다. 롬복 라이브러리 사용하기 getter, setter 어노테이션 제공 @RequiredArgsConstructor 롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. (코드에는 보이지 않지만 실제 호출 가능하다.) 최근에는 생성자를 딱 1개 두고, @Autowired 를 생략하는 방법을 주로 사용한다. 여기에 Lombok 라이브러리의@RequiredArgs..

개발/java 2024.01.06

[Spring 기본] 5. 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 컴포넌트 스캔 Configuration 클래스에 @ComponentScan 어노테이션을 붙인다. 스프링 빈으로 등록할 객체들을 @Component 어노테이션을 붙인다. 그러면 컨테이너에 빈으로 등록이 된다. 이전에는 직접 new MemberServiceImpl(memberRepository()) 같은 식으로 의존관계가 주입이 가능했는데, 지금은 불가능해졌다. 자동의존관계 주입 클래스의 생성자에 @Autowired 어노테이션을 붙이면 스프링 빈 중 해당 파라미터 타입에 해당하는 빈이 자동으로 의존관계 주입이 된다. applicationContext.getBean(MemberRepository.class) 의 결과를 주입한다고 보면 된다. 타입이 여러 개인 경우는 추후 설..

개발/java 2024.01.06

[Spring 기본] 4. 싱글톤 컨테이너

4. 싱글톤 컨테이너 1. java는 웹 애플리케이션 서비스 용 언어 요청이 있을 때마다 새로 new 를 해서 객체를 반환하는 문제 클라이언트가 요청할 때 매번 객체가 새로 생긴다 요청을 수행하기 위해 스레드가 하나 생기고, 독립적인 인스턴스가 생기기 때문에 그런 것이다. 2. 싱글톤 패턴 싱글톤 패턴을 이용하여, 하나의 객체를 가지고 요청을 처리하도록 할 수 있다. 생성자 private 화, 그리고 static 멤버 변수로 미리 생성해둔 후 getInstance() 로 반환. 3. 싱글톤 패턴의 문제점 싱글톤 패턴을 구현하는데 코드를 많이 필요로 한다. 의존관계상 클라이언트가 구현체에 의존하게 된다. DIP 위반 따라서 OCP 도 위반하게 된다. 유연한 테스트를 하기 어렵다. 내부 속성을 변경하거나 초..

개발/java 2024.01.06

2024년의 나

2023년의 회고 2022년 말부터 시작해서 가장 건강해지기 시작했던 시기 같이 다니는 친구 특유의 유머와 세상을 대하는 방식 덕분에, 더 따뜻하고 나를 챙길 줄 아는 사람이 되었다. 나를 바꾼 세 가지 책 : 알프레드 아들러의 '다시 일어설 용기', 에리히 프롬의 '사랑의 기술', 데일 카네기의 '인간관계론' 덕분 공부만하면서도 피폐해진 마음 때문에 입력과 출력이 따로 놀던 시기에서 벗어나, 효율적으로 공부하고 스킬을 익히게 됨. 많이 쉬면서 나아진 건강과 심리도 있지만, 실질적으로 공부에 투자한 시간이 부족 스스로 가장 아쉽다고 생각한 부분. 약간의 차이가 큰 변화를 만들어낸다고 생각하는 사람으로써, 약간의 차이로 인해 실력 격차가 생겼다고 느껴서 속상했던 1-2달을 보냈다. 다른 것보다, 이런 생각..

끄적 2023.12.22

[Spring 기본] 3. Spring 프레임워크 사용하기

1. 스프링 컨테이너 ApplicationContext = 스프링 컨테이너 @Configuration annotation이 붙은 AppConfig 를 구성정보로 사용한다. AppConfig 에서 @Bean 어노테이션이 뭍은 메소드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다B. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. 따라서 AppConfig 에서 객체를 찾아오는 대신, 스프링 컨테이너에서 필요한 스프링 빈(객체)를 찾아야 한다. AppConfig에서 MemberService 의 구현체를 반환하는 메소드 applicationContext.getBean(, 반환받을 클래스 타입) 함수로 스프링을 받아온다. 2. 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정 Appl..

개발/java 2023.12.21

백준 3190 뱀 - 큐, 시뮬레이션

https://www.acmicpc.net/problem/3190 난이도 골드4 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 벽이나 자기자신의 몸과 부딪히면 게임이 끝난다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지..

백준 1041 : 주사위- 도형, 그리디 알고리즘

https://www.acmicpc.net/problem/1041 문제 +---+ | D | +---+---+---+---+ | E | A | B | F | +---+---+---+---+ | C | +---+ 주사위는 위와 같이 생겼다. 주사위의 여섯 면에는 수가 쓰여 있다. 위의 전개도를 수가 밖으로 나오게 접는다. A, B, C, D, E, F에 쓰여 있는 수가 주어진다. 지민이는 현재 동일한 주사위를 N3개 가지고 있다. 이 주사위를 적절히 회전시키고 쌓아서, N×N×N크기의 정육면체를 만들려고 한다. 이 정육면체는 탁자위에 있으므로, 5개의 면만 보인다. N과 주사위에 쓰여 있는 수가 주어질 때, 보이는 5개의 면에 쓰여 있는 수의 합의 최솟값을 출력하는 프로그램을 작성하시오. 그림에서 파란색으..

Input 찬찬히 뜯어보기. (BufferedReader와 InputStreamReader?)

Java 에서 Input을 받기 위한 방법 1. BufferedReader Class 서론 저는 C, C++ 로 코드를 많이 짭니다. C, C++은 몇 단계만 거치면 바로 시스템 콜로 read, write 호출하는게 보여서 어떻게 동작하는지 아는게 쉬웠는데 java 는 왜 버퍼를 만들까… 하는 답답함이 있었습니다. 그래서 시간을 내어 원리를 파악하는 시간을 가졌습니다. 1. BufferedReader Class BufferedReader class 는 문자들의 연속을 입력받을 때 사용하는 간단한 클래스입니다. 코딩 테스트에서 속도를 빠르게 한다고 하여 많이 사용하는 클래스입니다. 보통 이런식으로 사용됩니다. BufferedReader 클래스는 안에 InputStreamReader를 반드시 사용해야할까요?..

개발/java 2023.12.11

[Spring 기본] 2. 실제 코드에서의 스프링 프레임워크 핵심 원리

1. 그냥 java 코드를 사용할 때 객체 지향의 원리에 맞게, 역할과 구현을 나누어 분리해봅시다. 회원 가입을 위한 요구사항을 만족하는 프로그램을 먼저 작성해봅시다! 회원 도메인 도메인 간 협력관계 : 기획자와 개발자가 모두 합의하에 참고하는 문서입니다. 클래스 설계 : 개발자가 전체적인 클래스를 설계합니다. public interface MemberService { void join(Member meber); Member findById(int id); } public class MemberServiceImpl implements MemberService { private MemberRepository memberRepository = new MemoryMemberRepository(); //실제 구..

개발/java 2023.12.08
728x90
728x90