전체 글 75

스프링 기본편 5

노션 링크https://earthy-grouse-d42.notion.site/1765723e06ee80adb19ddd059cde05e5컴포넌트 스캔컴포넌트 스캔과 의존관계 자동 주입 시작- 등록해야 할 빈이 수십, 수백개가 되면 일일이 등록하기 귀찮고 설정 정보도 커지고, 누락하는 문제가 발생한다.- 스프링은 설정 정보가 없어도 ** 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 **- ** 의존 관계 자동 주입 **해주는 @Autowired 기능도 제공한다.package hello.core;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Config..

Spring 2025.01.14

스프링 기본편 4

노션 링크https://earthy-grouse-d42.notion.site/1765723e06ee80adb19ddd059cde05e5웹 애플리케이션과 싱글톤- 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 개발- 대부분의 스프링 애플리케이션은 웹 애플리케이션 웹이 아닌 애플리케이션 개발도 얼마든지 가능 [웹 애플리케이션은 보통 여러 고객이 동시에 요청을한다.]- 스프링 없는 순수한 DI 컨테이너를 사용하면 요청을 할 떄마다 객체를 새로 생성 -> 만약 고객 트래픽이 초당 100이라면, 초당 100개의 객체가 생성되고 소멸되어 메모리 낭비 발생 // 순수한 DI 컨테이너 @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureC..

Spring 2025.01.13

스프링 기본편 3

노션 링크https://earthy-grouse-d42.notion.site/1765723e06ee80adb19ddd059cde05e5스프링 컨테이너 생성// 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // 매개변수로 설정 파일 클래스를 넘겨준다.- ApplicationContext를 스프링 컨테이너라고 한다.- ApplicationContext는 인터페이스- AnnotationConfigApplicationContext는 구현체- 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애너테이션 기반의 자바 ..

Spring 2025.01.11

스프링 기본편 2

노션 링크https://earthy-grouse-d42.notion.site/1765723e06ee80adb19ddd059cde05e5기존 코드 문제점DIP 위반OrderServiceImpl는 추상화인 MemberRepository와 DiscountPolicy에 의존하고 있지만 또한 MemoryMemberRepository, RateDiscountPolicy 구현 객체에도 의존하고 있으므로 DIP를 위반하고 있다. -> 즉 구현 객체를 직접 참조하고 있으므로 DIP를 위반하고 있음OCP 위반할인 정책을 FixDiscountPolicy에서 RateDiscountPolicy를 변경할 때 클라이언트 코드가 변경되었으므로 OCP 위반 public class OrderServiceImpl implements Or..

Spring 2025.01.10

스프링 기본편 1

노션 링크https://earthy-grouse-d42.notion.site/1765723e06ee80adb19ddd059cde05e5스프링 프레임 워크자바 기반의 프레임워크 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크즉, 객체 지향 프로그래밍을 잘 할 수 있게 도와주는 도구 **EJB를 사용하면 객체 지향 특징을 살리기 어려움 핵심 기술 스프링 DI 컨테이너, AOP, 이벤트, 기타...웹 기술 스프링 MVC, 스프링 WebFlux데이터 접근 기술트랜잭션, JDBC, ORM 지원, XML 지원기술 통합캐시, 이메일, 원격접근, 스케줄링테스트 스프링 기반 테스트 지원 언어코틀린, 그루비 스프링 부트스프링을 편..

Spring 2025.01.09

이코테 part 2 요약

그리디 알고리즘 - 탐욕법현재 상황에서 지금 당장 좋은 것만 고르는 방법 현재 선택이 나중에 미칠 영향은 고려하지 않는다. **그리디 알고리즘은 **기준을 알게 모르게 제시**해준다.**그리디 알고리즘으로 문제의 해법을 찾았을 때는 그 해법이 정당한지 검토해야 한다.Ex) 큰 단위의 동전이 항상 작은 단위의 동전의 배수이다. 모든 문제에 적용할 수 없음 **바로 문제 유형을 파악하기 어렵다면 그리디 알고리즘을 의심하고, 문제를 해결할 수 있는 탐욕적 해결 방법이 존재하는지 고민해봐라 → 다이나믹 프로그래밍, 그래프 알고리즘구현완전탐색, 시뮬레이션 문제완전 탐색 - 모든 경우의 수를 주저 없이 다 계산하는 해결 방법 시뮬레이션 - 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 문제 유형파이썬..

알고리즘 2024.12.19

백준 2805 [python]

문제상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다.목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15, ..

알고리즘 2024.12.06

Object 클래스의 메서드

Object 클래스모든 클래스의 최상위 클래스 즉, 모든 클래스는 Object를 상속 받는다. 객체 간 비교, 해시 값 생성, 문자열 표현 등을 위해 기본 메서드를 제공한다. // 11가지 기본 메서드Object 타입으로 모든 객체를 참조할 수 있다. Object 클래스 메서드toString 메서드객체 정보를 문자열로 반환하는 메서드 (출력 X)객체정보는 "패키지이름.클래스이름@해쉬코드" 형식으로 표현 됨 일반적으로 하위 클래스에서 toString 메서드를 재정의해서 사용한다. 많은 표준 라이브러리 클래스에서 toString 메서드가 재정의 되어 있음 Ex) Wrapper, String, CollectionWrapper 클래스의 경우 객체에 저장된 값을 반환 하도록 재정의String 클래스의 경우 객체에..

JAVA 2024.12.04

백준 2579 [python]

내 풀이1. 목적지에서 시작하여 시작 지점까지 재귀 함수를 호출한다.2. 목적지로 올 수 있는 경우에 대해 최대값을 구하고 최대값에 현재 계단의 값을 더해 최대값을 구한다. Ex) 5번째 계단의 경우 3번과 4번에서 올 수 있으므로 둘 중 최대값을 구하고 5번째 계단의 값을 더해 최대값을 구한다. 3. 연속으로 세번 이동하는 경우에 대한 예외 처리를 해주기 위해 cnt 값이 3이 되면 0을 반환하게 한다.4. 목적지에 따라 오는 경우의 수의 최대값이 다르기 때문에 이를 고려하여 dp 테이블을 생성한다. 특정 목적지로 오기 위한 최대값이므로 다름 Ex) 4번에 도착하기 위한 2번의 최대값과 3번에 도착하기 위한 2번의 최대값이 다를 수 있음 몇 번째 계단인지랑, 연속으로 몇 번 이동했는지..

알고리즘 2024.11.28

백준 1912 [python]

문제n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.입력첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다.출력첫째 줄에 답을 출력한다.1차 시도 코드import sysN = int(sys.stdin.readline().rstrip())arr = list(map(int, sys.stdin..

알고리즘 2024.11.27