본문 바로가기

분류 전체보기

(109)
@Bean과 @Component 사용하는 이유와 사용하는 방법. 차이점. @Bean과 @Component 어노테이션을 사용하는 이유와 사용하는 방법, 그리고 두 어노테이션의 차이점에 대해서 정리해보겠습니다. 혹시 아직 Spring IoC Container, Dependency Injection(의존성 주입)과 Bean의 개념에 대해서 정리가 필요하신 분들은 아래 글을 먼저 읽어보시길 바립니다. https://limminjeong98.tistory.com/459 Spring IoC(Inversion Of Control) Container과 Bean 그리고 Dependency Injection / IoC 컨테이너와 의존성 주입 IoC(Inversion Of Control) Container란? 객체가 생성될 때, 그 객체와 관련 있는 다른 객체들의 의존성 주입을 가능하게 하는 S..
Spring IoC(Inversion Of Control) Container과 Bean 그리고 Dependency Injection / IoC 컨테이너와 의존성 주입 IoC(Inversion Of Control) Container란? 객체가 생성될 때, 그 객체와 관련 있는 다른 객체들의 의존성 주입을 가능하게 하는 Spring Framework에서 AOP(Aspect Oriented Programming)를 구현할 수 있는 ApplicationContext 인터페이스입니다. 스프링 공식 문서에서는 IoC 컨테이너에 대해서 아래와 같이 설명하고 있습니다. It is a process whereby objects define their dependencies (that is, the other objects they work with) only through constructor arguments, arguments to a factory method, or prope..
String과 StringBuffer, StringBuilder의 차이점 String은 변경이 불가능한 클래스(immutable class)입니다. 한번 생성된 String 인스턴스가 갖고 있는 문자열을 변경하거나 추가하게 되면 새로운 char형의 배열을 선언하게 됩니다. 따라서 문자열의 변경, 추출 등의 작업이 많은 경우에는 String 인스턴스가 계속 생겨나고 새로운 문자열이 메모리의 String Pool이라는 공간에 올라가기 때문에 속도도 저하되고 점점 더 많은 메모리를 차지하게 되어 프로그램 성능에 영향을 줄 수 있습니다. 이러한 문자열 변경 작업으로 인한 성능을 개선시키기 위해서는 내부적으로 문자열 편집을 위한 버퍼를 가지고 있으며, 이 버퍼의 크기를 넘어가지 않는 한에서는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 있는(mutable) StringBuffer ..
객체 지향 설계 5가지 SOLID 원칙 좋은 객체 지향 설계의 5가지 SOLID 원칙 (로버트 마틴) 1. SRP / Single Responsibility Principle 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임의 기준은 변경. 소프트웨어 모듈은 변경의 이유가 단 하나여야만 한다. 2. OCP / Open Closed Principle 개방 폐쇄 원칙 소프트웨어 요소(개체)는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 소프트웨어 개체의 행위는 확장될 수 있어야 하지만, 이때 개체를 변경해서는 안된다. => 다형성을 활용해 인터페이스를 구현한 새로운 클래스를 만들어 새로운 기능을 구현하도록 한다. 3. LSP / Liskov Substitution Principle 리스코프 치환 원칙 프로그램의 객체는 프..
H-Index Javascript [프로그래머스 정렬] 더보기 function solution(citations) { let answer = 0; const length = citations.length; let max_h = 1; while (1) { let total = 0; for (let i = 0; i = max_h) { total += 1; } } if (total < max_h) { break; } else { answer = max_h; max_h += 1; } } return answer; } https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지..
가장 큰 수 Javascript [프로그래머스 정렬] 이 문제는 주어진 배열의 숫자를 정렬하고 문자열로 리턴하되 9와 90와 같이 서로 자릿수가 다른 숫자를 비교할 때에 주의해야 한다. 일반적으로 배열의 원소들이 숫자일 경우, 내림차순 정렬을 할 때에 arr.sort((a, b) => b - a); 와 같이 정렬한다. 이렇게 정렬하면 [100, 9] => 1009 와 같이 리턴하게 될 것이다. 하지만 1009보다 9100이 더 큰 숫자이다. 이 문제는 100 이 9보다 뒤에 위치해야하는 문제이기 때문에 숫자로 비교하면 안 되고, 각 숫자의 첫번째 글자부터 마지막 글자까지 문자열의 아스키코드를 차례대로 비교하여 정렬해야 한다. 따라서 Javascript 내장함수 sort를 그대로 사용하면 된다. 하지만 각 숫자의 길이가 다르면 비교가 안되기 때문에 각 자릿수..
K번째 수 Javascript [프로그래머스 정렬] 더보기 function solution(array, commands) { let answer = []; let length = commands.length; for (let t = 0; t a-b); answer.push(tmp[k-1]); } return answer; } https://programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] pro..
키패드 누르기 Javascript [프로그래머스] 2020 카카오인턴십 Python => https://limminjeong98.tistory.com/81 키패드 누르기 Python [프로그래머스] 2020 카카오 인턴십 (x, y) => (x1, y1)으로 이동한다면 0. 키패드의 현재 위치에서 다음 위치까지는 abs(x-x1) + abs(y-y1)를 계산해주면 된다. preL = (3, 0) 3행 0열 즉 *에 위치하고 있고 preR = (3, 2) 3행 2열 즉 #에 위치하고.. limminjeong98.tistory.com https://programmers.co.kr/learn/courses/30/lessons/67256 더보기 function solution(numbers, hand) { let answer = ''; let cur_lx = 3, cur_ly = ..