Dev

Dev/Spring

[Spring] DI를 사용하여 구현 클래스 변경하기

인프런 김영한 선생님 스프링 입문 강의를 보고 정리한 내용입니다. MemberRepository 인터페이스를 구현하는 MemoryMemberRepository와 JdbcMemberRepository가 있었다. 이때 MemoryMemberRepository를 빈으로 저장해 두었는데, 새로운 JdbcMemberRepository를 구현하면서 빈으로 등록하여 사용하고자 했다. 코드를 어떻게 작성해야 JdbcMemberRepository를 빈으로 생성하여 가져올 수 있을까? 방법은 매우 간단하다! SpringConfig를 통해 MemoryMemberRepository를 빈으로 생성하고 있는 코드를, 위처럼 수정해 주면 된다. memberRepository()를 호출했을 때 JdbcMemberRepository를..

Dev/Spring

[Spring] 스프링 빈과 의존관계

스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기 컴포넌트 스캔과 자동 의존관계 설정 @Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다. 이때 @Controller, @Service, @Repository 모두 @Component를 포함하고 있기 때문에 각자의 로직에 맞게 어노테이션을 붙여줘도 되는 것이다. → @Controller 컨트롤러가 스프링 빈으로 자동 동록되는 이유가 컴포넌트 스캔 때문이다. 스프링 빈 등록 이미지 @Controller, @Service, @Repository는 @Component를 대체할 수 있다. 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 싱글톤으로 등록한다. (대부분 하나만 등록해서 공유한..

Dev/Java

[Java] isPresent() vs. ifPresent()

회원가입 로직을 구현하던 중 ifPresent()를 사용하게 되었다. 나중에 요긴하게 쓸 것 같아 정리하려고 한다. isPresent() boolean 타입 Optional 객체가 값을 가지고 있으면 true, 없으면 false를 반환한다. ifPresent() void 타입 Optional 객체가 값을 가지고 있으면 실행, 없으면 넘어간다. 회원가입을 하는 과정에서 같은 이름이 있으면 ifPresent()를 사용하여 예외를 발생시키는 코드이다. 참고 https://sin0824.tistory.com/25

Dev/Spring

[Spring] @ResponseBody

인프런 김영한 선생님 스프링 입문 강의를 보고 정리한 내용입니다. @ResponseBody html에 나오는 바디 태그가 아니라 http body에 이 데이터를 직접 넣어주겠다는 의미 해당 어노테이션을 작성하면 ViewResolver 대신 HttpMessageConverter가 동작한다. 문자열인 경우 문자열 그대로 반환 (StringConverter) 객체인 경우 JSON 형식으로 반환 (JsonConverter / MappingJackson2HttpMessageConverter) 위처럼 리턴값을 작성하면 뷰 대신 문자열을 출력하며, 위처럼 리턴값이 객체이면 JSON을 출력한다. 주소창에 입력하면 이렇게 JSON이 반환된 것을 확인할 수 있다.

Dev/Java

[Java] pickNumberInRange ArrayIndexOutOfBoundsException

우테코 menu 문제 기능 구현을 끝내고 테스트 코드를 돌렸는데 위 에러가 떴다. 여기서 의문이 든 게 나는 pickNumberInRange 범위를 0에서 4로 맞춰놨기 때문에 5가 나올 수 없는 구조였다. 도대체 어디서 날아온 건가.. 구글링으로도 답을 못 찾다가 20분 삽질로 원인을 찾아냈다. 테스트 코드에서 5를 넘겨주고 있다.. 당연히 5가 넘어올 수밖에 없는 상황이었다.. 도저히 5의 출처를 못 찾겠어서 설마 테스트 코드에서 넘어오는 건가 하고 확인해 보니 설마가 맞았다. 우테코에서 제시한 테스트 코드를 써야했기 때문에 발생한 특수한 문제같다. 이런 경우가 또 생길지는 모르겠지만 기억하고 있어야겠다.

Dev/Java

[Java] IllegalArgumentException vs. IllegalStateException

요즘 코드를 작성하면서 예외처리에 집중했는데, 그 과정에서 IllegalArgumentException를 매우 매우 자주 작성했다. 그러다 보니 IllegalStateException가 있다는 건 알고 있는데 언제 쓰는 거지? 라는 생각이 들며 궁금해졌다. 그래서 두 예외의 차이를 찾아보았다. IllegalArgumentException 적절하지 않거나 유효하지 않은 데이터를 받았을 때 발생되는 예외 양수를 파라미터로 기대하고 있었는데 음수가 넘어왔을 때나 API를 통해 넘어온 값이 올바르지 않을 때 발생 (파라미터에 따른 예외처리를 많이 하기 때문에 이 예외를 훨씬 자주 쓰는 듯 하다) IllegalStateException 죽은 스레드로부터 불려지는 경우와 같이 불려져서는 안될 시간에 메소드가 호출될..

Dev/Java

[Java] IntelliJ 프로젝트 빌드 안 될 때 (Link Gradle Project)

깃에서 프로젝트를 클론 받은 후 인텔리제이로 파일을 열었는데 프로젝트가 빌드되지 않는 문제가 발생했다. 아예 자바 파일을 인식하지 못 하는 모습.. JDK 문제로 Gradle이 제대로 임포트 되지 않아서 발생하는 문제 같았다. 예전에도 겪었던 문제 같은데 다음부턴 잊지 않고 대처하기 위해 적어두려고 한다! (밑에 나오는 방법은 맥북 기준이다) 먼저 File > Project Structure > Project Settings > Project로 들어간다. 여기서 SDK와 Language level을 설정해 준다. 나는 우테코에서 요구하는 11 버전으로 맞춰주었다. 바로 밑에 있는 Moduls로 들어가 Language level을 위에서 선택한 버전으로 맞추어준다. 그리고 같은 창에 있는 Paltform ..

Dev/Java

[Java] 예외 테스트 코드가 실행되지 않을 때 (try-catch)

요즘 내 코드가 클린하지 못하다는 생각이 들어 작년 우아한 테크코스 문제를 풀어보고 있다. 2주 차 로또 문제의 필수 기능을 구현한 후 테스트 코드를 돌렸는데 해당 테스트 코드가 돌아가지 않았다. ERROR_MESSAGE는 "[ERROR]"이고, 예외를 던졌을 때 "[ERROR]"를 포함하고 있으면 되는 테스트 코드였다. 하지만 나는 로또 문제를 풀면서 생성되는 모든 에러에 [ERROR]를 붙여놨기 때문에 무엇이 원인인지 파악하기 힘들었다.. 그리고 30분 정도 구글링을 해서 문제점을 찾은 결과, 테스트 코드에서 내가 던진 예외를 못 받고 있었다. 즉, new로 생성된 에러를 잡아줄 catch문이 없었다.. 위처럼 에러를 생성해서 던지고 있는데 이 에러를 받아줄 catch 구문이 없었다... 때문에 여기..

yo0oni
'Dev' 카테고리의 글 목록 (6 Page)