전체 글 474

스프링 컨테이너와 스프링 빈_(feat.BeanDefinition)

1. 스프링 컨테이너 ? ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 한다. 2. AnnotationConfigApplicationContext 와 GenericXmlApplicationContext ApplicationContext는 인터페이스이다. JAVA : AnnotationConfigApplicationContext 는 인터페이스를 구현한 구현체이다. AnnotationConfigApplicationContext는 java 클래스를 이용해서 bean을 등록하는 방식이고 최근에 주로 사용된다. XML : Applic..

DI(의존관계 주입)와 DI 컨테이너

DI ( Dependency Injection ) 의존성 주입이 뭐에요? > 런타임에 외부에서 구현 객체를 생성하고 클라이언트에 전달하여 클라이언트와 서버의 의존관계가 연결되는 것을 의미 이를 이용해서 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 타입 인스턴스를 변경할 수 있다. 이는 정적인 클래스 의존관계는 변경하지않고 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다는 의미이다. 그러면 DI 컨테이너는요? > 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것 (ex. AppConfig)

좋은 객체 지향 설계의 원칙(SOLID)

S : SRP ; 단일 책임 원칙 O : OCP ; 개방/폐쇄 원칙 L : LSP ; 리스코프 치환 원칙 I : ISP ; 인터페이스 분리 원칙 D: DIP ; 의존 관계 역전 원칙 여기서 중요한 원칙은 SPR, OCP, DIP이다. SRP (Single Responsibility Principle) 는 한 클래스는 하나의 책임만 가져야 한다는 원칙이다. OCP (Open - Close Priciple) 은 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야 한다는 원칙이다. DIP (Dependency Inversion Principle) 은 "구체화가 아닌 추상화에 의존해야 한다"는 원칙이다. -> 의존성 주입은 이 원칙을 따르는 방법 중 하나다.

[삼성SW역량][Python/BOJ] 백준 21609 상어 중학교(구현)

으렵다!! 그래도 계속 풀다보면 익숙해지겠지 이차원 배열을 뒤집어야하는데 이 문제를 풀면서 포스팅을 작성했다. 참고 : https://what-am-i.tistory.com/330?category=1000199 [python]이차원 배열을 뒤집는 방법_zip(*list) 알고리즘을 풀다보면 이차원 배열을 뒤집어야하는 문제가 가끔 나온다. 그럴때마다 그때 그때 이해해서 적었지만 이것을 정리하고 싶어서 글을 쓴다. 1. " * " python에서 아스트리크(*)은 unpack역할 what-am-i.tistory.com 크기가 가장 큰 블록을 찾을 때 여러 개라면 무지개 블록의 수가 많은 그룹, 무지개 블록의 수도 동일하다면 기준 블록의 행과 열이 가장 큰것을 찾는다. (즉, 1. 크기, 2. 무지개 블록의 ..

[python]이차원 배열을 뒤집는 방법_zip(*list)

알고리즘을 풀다보면 이차원 배열을 뒤집어야하는 문제가 가끔 나온다. 그럴때마다 그때 그때 이해해서 적었지만 이것을 정리하고 싶어서 글을 쓴다. 1. " * " python에서 아스트리크(*)은 unpack역할을 한다. 첫줄은 이차원 배열 , 두번째 줄은 이차원 배열에서 *를 한 결과이다. 첫줄은 각 리스트들이 하나의 리스트로 연결되어있지만 두번째 줄은 리스트들이 unpack된것을 확인할 수 있다. 2. zip() zip은 iterable한 것들을 엮어준다. 지퍼를 올리는 것처럼 양측의 데이터를 짝을 지어준다. 아스트리크(*)와 zip을 함께 사용하면? 무슨 일이 일어날까? a = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] print(zip(*a)) print(list(zip(*a)))..

[삼성SW역량][Python/BOJ] 백준 20058 마법사 상어와 파이어스톰(구현+BFS)

간단하게 보면 1. 얼음을 회전시키고 녹이는 함수 2. 가장 큰 얼음 덩어리의 사이즈를 구하는 함수를 만들어 해결하면 된다. 문제는 얼음을 회전시키는 코드를 생각하기 쉽지않았다는 것이다. 2^L씩 구간을 나누어 시계방향으로 90도 회전하는데 이 방법을 도저히!!! 생각이 나지 않았다. 이걸 매번 tmp로 받아서 저장하고 빼서 만드나? 너무 구차한데? 아닐것같은데 ? 만약 tmp로 안빼고 만들면 숫자가 움직이는 과정에서 원래 숫자를 덮어버려서 안될텐데? 정답은 바로 새롭게 저장할 mp배열을 만드는 거였다^-^! (정말 획기적!) 2^L 만큼의 간격으로 x,y를 넘어다니고 그 안에서는 i,j로 90도 시계방향으로 움직이도록 만든다. 4중 for문으로 나타낸 그림은 아래 그림과 같다. 코드 : from col..

[삼성SW역량][Python/BOJ] 백준 17822 원판돌리기(구현)

덱으로 이차원 리스트를 만들 수 있다는 것을 처음 알았다..!! 아직도 배울 것이 많다ㅎㅎ 이 문제를 푸는 방법은 그저-! 빡구현!! 할수있다!! 화이팅🔥🔥 1. 숫자들을 리스트 -> 덱으로 만들어 저장한다. 2. 덱으로 저장되어있으므로 rotate를 이용할 수 있다. 3-1. 양옆을 확인하여 동일한 값이 있는지 체크한다. 3-2. 위, 아래를 확인하여 동일한 값이 있는지 체크한다. 4-1. 동일한 값이 있으면 0을 넣는다. 4-2. 없다면 원판을 돌면서 평균을 구하고 원판을 돌면서 원판위 값을 조정한다. 코드 : from collections import deque if __name__=="__main__" : n,m,t = map(int,input().split()) mp = [deque(list(m..

[자바의 신 9장] 접근 제어자_public, protected,private

public : 누구나 접근할 수 있도록 protected : 같은 패키지 또는 상속받은 경우 package-private : 아무런 접근 제어자를 적어주지 않았을 때, 같은 패키지 내에서만 접근 가능 private : 해당 클래스 내에서만 접근 가능 자바에서는 하나의 소스 파일에 여러 개의 클래스가 선언될 수 있다. 하지만 public으로 선언된 클래스와 그 소스파일의 이름은 꼭 동일해야만 한다.

[자바의신 8장]Pass by Value 와 Pass by Reference

참조 자료형 : 기본 자료형을 제외한 모든 타입 Pass by Value ; 값만 전달한다. 원래 값은 건드리지않고 변수들의 복제본들만 메서드에 넘겨준다. -> 매개변수를 받은 메서드에서 그 값을 지지고 볶든 원래 값은 변하지 않는다. Pass by Reference ; 객체에 대한 참조가 넘어간다. (메서드에서 변경한대로 변경된다. ) 메서드의 매개 변수로 참조 자료형을 넘길 경우에는 메소드 안에서 객체의 상태를 변경한 결과에 영향을 받는다. 모든 기본 자료형은 pass by value 참조 자료형은 pass by reference -> 참조 자료형 자체는 pass by value, 그 안에 것들은 pass by reference

[React]react와 mysql 연결

0. 파일 구조 1. DB 설정 1-1. mysql DB를 만든 후 권한설정을 한다. 첫번째 빨간색에는 user이름이 두번째 빨간색에는 비밀번호가 들어간다. 1-2. 사용할 데이터들을 DB에 insert한다. 2. config -> db.js 수정 const mysql = require('mysql'); const db = mysql.createPool({ host : '[host]', user : '[유저 이름 ]', password : '[비밀번호]', database : '[DB 이름]' }); module.exports = db; 만든 DB에 접속할 수 있도록 config에 db파일을 만들어준다. 3. server.js 수정 const express = require('express'); cons..