반응형

분류 전체보기 316

스프링 컨테이너

이제 스프링의 핵심기능인 스프링 컨테이너를 생성해보자 1 ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); cs ApplicationContext인 ac는 인터페이스며 스프링 컨테이너이다. AnnotatiocConfigApplicationContext는 스프링 컨테이너의 구현체이다. 스프링컨테이너에 @Configuration이 들어있는 Appconfig 클래스를 인식시킨다. 그리고 Appconfig에 들어있는 @Bean 메소드를 인식해서 스프링 컨테이너 안에 넣어두고 필요할때 쓴다. 스프링컨테이너에 넣었다면 잘 넣어졌는지 테스트코드를 짜보고 돌려보자! 테스트코드다. 스프링에서 지원하는 기본 Bean까지 모두 보..

[프로그래머스,자바] Level1: 위클리챌린지 4주차 [직업군 추천하기]

문제분석 문제 접근은 쉽지만 Level1치곤 구현난이도가 조금은 있는문제였다. 3중반복문을 써야하기때문이다. 문제는, Languages와 Preference를 줄테니, 선호도와 직업군 언어점수의 랭크를 계산해서 Max값을 Return 하는문제다. Max값이 중복이면 사전순으로 빠른직업군으로 정렬해서 출력. 문제풀이 문제를 풀기전에.. 우선 3중 반복문을 써야할것 같은데 라는 생각은 했다. 하지만 이런 생각하기전에, 더 효율적으로 짤순없을까라는 생각을 한번은 더해보는것이 중요하다. 그렇게 10~20분정도 생각하고 내 생각으론 어떤방법으로도 3중반복문을 거쳐야할거같아서, 그대로 구현하기로 했다. 개인적으로 빨리 코드 구현도 중요하지만, 어떻게 코드를 효율적으로 코드를짤지 고민하는시간이 더 중요한거같다. 결국..

[프로그래머스,자바] Level2: 위클리 챌린지 5주차 [모음 사전]

문제분석 문제는 A , E, I, O, U 로만 쓰여있는 사전낱말중에서 특정 단어가 몇번째 위치하는지 구하는 문제다. 무엇을 구해야하는지는 명확하니 구현으로 넘어가겠다. 문제풀이 딱 이문제를 보고 생각한게, 단어를 이루는 문자가 5개니깐 5중반복문이나, 완전탐색(DFS,BFS)으로 전부 탐색하면 되는거 아닌가? 모든 경우를 도는 횟수는 계산해보면 연산을 각 단어만다 최대 3905번을 탐색한다. {UUUUU=3905} 하지만 ,매번 들어오는 단어마다 최대 3905번 반복하는건 너무 비효율적이지 않나? 그래서 규칙을 곰곰히 생각해봤다. 먼저 3번째 예시인 "I" 의 위치값을 보자, 1563이다. 그렇다면, "I" 이전에 지나온 낱말수는 1562개란뜻이다. 지나온 낱말수는 총 2개 즉, 맨 앞자리의 문자가 바..

스프링(Spring):관심사의 분리

이전 포스팅에 다형성만으로는, OCP(개방 폐쇄의 원리), DIP(의존 주입 원리)를 지키지 못한다. 이를 지키기위해서 관심사의 분리라는 테크닉이 등장한다! 우선 왜 OCP, DIP를 지키지 못하는걸까? 코드를 봐보자, MemberRepository는 Interface고, MemoryMemberRepository는 구현 클래스다. 지금 MemberServiceImpl 클래스는 MemberRepository 인터페이스와 MemoryMemberRepository클래스 둘다 의존하고있다. 이건 DIP에 위반된다. DIP는 구현체에 의존하지말고 인터페이스에 의존해야되는 원리이다. 또한, 나중에 Memory저장소가 아닌, 다른 저장소로 변경될시에 수정할때 MemberRepository클래스를 수정해야한다. 이러면..

Spring(스프링) 이란?

스프링이 왜 만들어졌으며 스프링의 핵심은 무엇일까? 스프링이 만들어진 진짜이유는 자바의 객체 지향 프로그래밍(OOP)을 더 좋은 객체 지향 프로그래밍 으로 만들기위해서 스프링이 탄생한것이다. 웹 어플리케이션을 만들고 DB접근하는 편리한 기술 제공, 전자정부 프레임워크, 서버도 자동으로 띄어주고, 클라우드, 마이크로 서비스 등등 이런것은 스프링을 사용하며 따라오는 결과물인것이다. 객체지향 프로그래밍의 특징을 잘 살려내기위해 개발한 프레임워크가 스프링 프레임워크다. 객체 지향 프로그래밍(OOP)이 뭐길래? 객체 지향 프로그래밍의 대표적인 특징 4가지 추상화, 상속, 캡슐화,다형성이 매우 중요하다. 자바를 배운다면 꼭알아야할 특징이다. 객체지향 프로그래밍의 정의가 뭘까? . 위키피디아에서 가져온 정의를 보면,..

[프로그래머스,자바] Level1:문자열 다루기 기본

문제분석 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어있으면 TRUE반환 그외에는 False를 반환하면 끝이다. 문제풀이 숫자로만 구성되어있는걸 아스키코드를 통해서 표현했다. 48~57사이들어있는 값이 숫자로댄 값이기때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution { public boolean solution(String s) { boolean answer = true; char[] c =s.toCharArray(); if(s.length()==4||s.length()==6){ for(char data:c){ if(data=48){ answer=true; } else{ answer=false; break; } ..

[프로그래머스,자바] Level1: 문자열 내림차순으로 배치하기

문제분석, 풀이 문자열 s을 큰것부터 작은순대로 다시 정렬하면되는문제다. 아스키코드를보면 대문자 b.compareTo(a)); 로 람다식으로 표현도가능하다! 1 2 3 4 5 6 7 8 9 import java.util.*; class Solution { public String solution(String s) { String answer = ""; String[] a = s.split(""); Arrays.sort(a,Collections.reverseOrder()); return answer=String.join("",a); } } Colored by Color Scripter cs

[프로그래머스,자바] Level1:문자열 내 p와 y의 개수

문제분석 문자열 s에 있는 p와 y를 세어서, 갯수가같으면 true 갯수가 틀리면 false를 반환한다. 문제풀이 세기전에 모든 문자를 대소문자를 대/소로 통일한다. p의 갯수를세는 p_cnt y의 갯수를 세는 y_cnt 를선언하고 센다. 갯수를센뒤 다르면 false로 바꾼다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.util.*; class Solution { boolean solution(String s) { boolean answer = true; int p_cnt =0; int y_cnt=0; String[] a = s.toLowerCase().split(""); for(int i=0;i

[프로그래머스,자바] Level1:문자열 내 마음대로 정렬하기

문제분석 strings에 있는 단어들을 n에 위치한 문자를 기준으로 다시 정렬해주는 문제다. 정렬기준을 바꿀줄 안다면 쉽게 풀수있는문제다. 문제풀이 필자는, 이렇게 Override 정렬하는걸 별로 좋아하지않는다. 람다식으로 Arrays.sort(strings,(a,b)->a.charAt(n)-(b.charAt(n))으로 하려다가, 조건: 인덱스 1의 문자가 같은문자열이 여럿일 경우 사전순으로 앞선 문자열 먼저 배치 때문에 이게 통하지않는다. Arrays.sort(strings)를 먼저하고 하면 되긴하지만 속도가 너무 많이걸려서 포기했다. 그래서 정석대로 Override하여 구현했다. Compartor를 새로 선언한뒤, 정렬기준을 override하여 같을때는 기존정렬, 아니면 n에위치한 문자를 기준으로 정..

반응형