디자인 패턴
·
나의 공부방
1. 디자인 패턴이란? -> 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다. 디자인 패턴을 참고하여 개발할 경우 개발의 효율 성과 유지 보수성, 운용성이 높이자며, 프로그램의 최적화에 도움이 된다. 2. 디자인 패턴의 유형 구분 유형 설명 목적 생성 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴 구조 더 큰 구조 형성 목적으로 클래스나 객체의 조합을 다루는 패턴 행위 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴 범위 클래스 클래스 간 관련성( 상속 관계를 다루는 패턴) 컴파일 타임에 정적으로 결정 객체 객체 간 관련성을 다루는 패턴 런타임에 동적으로 결정 3. 디자인 패턴의 종..
[Java] 백준 1500 (최대곱)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1500 1500번: 최대 곱 세준이는 정수 S와 K가 주어졌을 때, 합이 S인 K개의 양의 정수를 찾으려고 한다. 만약 여러개일 경우 그 곱을 가능한 최대로 하려고 한다. 가능한 최대의 곱을 출력한다. 만약 S=10, K=3이면, 3,3,4는 www.acmicpc.net 수학 문제 알고리즘이다. 정수 S가 주어졌을 때 갯수가 K개이고 합이 S인 양의 정수를 구해야 한다. 중요 로직을 말하자면 먼저 1의 갯수가 적어야 곱이 최대로 크므로 중간값을 많이 구해야 한다고 생각했다. 중요 로직 코드를 설명하겠다. while (true){ if(s
조금 늦은감이 있는 2024년 목표
·
끄적끄적
올해는 요즘 쿠버네티스니 뭐니 해서 유행하는 기술 스택 학습 유혹에 흔들리지 않고 좀 더 기본적인 지식을 배워 다질 생각이다.. 이런 기본적인 것들을 좀 더 확실히 학습해놓고 고도화 시켜놔야 나중에 트러블슈팅에 대해 빨리 대응하고 대처할 수 있다고 생각하기 때문이다. 일단 정보처리기사 실기를 앞두고 있어 이것을 우선 순위에 두고 있다. [2024년 월별 강의 목표] 4월 : Http + 정보처리기사 실기 준비 5월 : 김영한 MVC 1편, 2편 6월 : 김영한 DB 1편, 2편 7월 : 김영한 스프링 핵심 원리, 핵심 원리와 활용 8월 : JPA 기본편 9월 : JPA 활용1 - 웹 어플리케이션 개발 10월 : JPA 활용2 - API 개발과 성능 최적화 11월 : 스프링 데이터 JPA 12월 : 실전 ..
[Java] 백준 1010번 (다리놓기)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1010 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net N구역에서 M구역으로 다리를 건설한다. (N
[Java] 백준 1012번 (유기농 배추)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 전형적인 bfs 문제이다. Queue를 사용해서 풀었다. ​ 먼저 초기화 작업이다. 문제에 나와있듯이 각 케이스마다 m, n, k를 구해야 한다. StringTokenizer를 사용해 변수에 값을 넣었다. t = new StringTokenizer(br.readLine()); int m = Integer.parseInt(st.nextToken()); int n = Integer.parseInt(st.nextT..
(실습)객체지향 설계 원칙를 지키면서 설계하기
·
Spring Framework
먼저 레거시입니다. 클라이언트 클래스가 MemberRepository라는 인터페이스뿐만 아니라 MemoryMemberRepository라는 구체 클래스에도 의존하고 있다. ​ 그래서 DIP, OCP를 위반하고 있다. ​ 이해를 안갈 수 있으니 예를 들어보자. 만약 구체(구현) 클래스가 JpaRepository로 바뀌었다. 그러면 클라이언트 클래스 (MemberServiceImpl) 에서 new JpaRepository로 변경할 것이다. ​ 의존관계에서 구체 클래스를 의존하고 있어 DIP를 위반하고 있다. 그리고 만약 구체 클래스를 변경하려면 클라이언트 클래스를 직접 수정해야 하므로 OCP를 위반한다. ​ ​ ​ 문제를 해결하는 방법이다. 인터페이스에만 의존하는 방법으로 생성자를 통해 구현 객체를 주입(D..
객체 지향 설계의 5가지 원칙(SOLID)
·
Spring Framework
SOLID 원칙이란? -> 객체 지향 설계에서 지켜야 할 5개의 소프트웨어 개발 원칙이다. ​ SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 ​ 좋은 소프트웨어란 변화에 대응을 잘 하는것을 말한다. SOLID 객체 지향 원칙을 적용하면 코드를 확장하고 유지, 보수, 관리 하기가 더 쉬워지며, 불필요한 복잡성을 제거해 리팩토링에 소요되는 시간을 줄임으로써 ..
[Java] 백준 1049 (좋은 구간)
·
BOJ, Programmers
https://www.acmicpc.net/problem/1059 1059번: 좋은 구간 [9, 10], [9, 11], [9, 12], [10, 11], [10, 12] www.acmicpc.net 구간을 찾는 문제이다. 정수 집합 S가 있고, 주어진 숫자가 포함된 구간을 좋은 구간이라고 한다. A n) { if(numbers[i] < end) end = numbers[i]; }else if(numbers[i] < n) { if(start < numbers[i]) start = numbers[i]; } else if(numbers[i] == n){ // 만약 갖고 있다면 break; System.out.println("0"); System.exit(0); } } 아래는 전체 코드이다. import ja..
Test
·
BOJ, Programmers
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); int pkgPri [] = new int [n]; int onePri [] = new int [n]; int min; for (int i = 0; i < n; i++) { pkgPri[i] = scanner.nextInt(); onePri[i] = scanner.nextInt(); } Arrays.sort(pkgPri); Arrays.s..