코코코딩공부

    [Spring] Bean 이란 ?

    들어가며 스프링을 사용하면서 기존 자바보다 객체 생성, 조립, 사용을 훨씬 편하게 해준다는 것을 알았고 이에 기본적으로 Bean이라는 개념이 사용된다는 것을 알았다. 하지만 Bean이 무엇인지에 대한 의문점이 있어 정리해보았다. 스프링 빈 이란 ? 빈이란 스프링 IOC 컨테이너 가 관리하는 객체이다. 빈은 Spring IoC 컨테이너에 의해 인스턴스화, 조립 및 관리되는 객체이다. 인스턴스화 된 빈은 @Autowired를 통해 의존성 주입을 받을 수 있다. 인텔리제이에서 옆에 콩처럼 표시가 되어있다면 빈등록이 되었다는 것을 의미한다. @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @..

    [Spring] 테스트 DB Failed to load ApplicationContext 에러

    문제 스프링 미션을 진행하던 중 단위 테스트는 잘 수행되었으나 통합테스트가 에러가 났다. java.lang.IllegalStateException: Failed to load ApplicationContext Failed to load ApplicationContext java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) ~~~ Caused by: org.springframework.bean..

    [Architecture] Layered Architecture

    들어가며 스프링을 사용함에 있어서 Layered Architecture 사용하게 되었는데 이게 어떤 것이고 왜 쓰는지에 궁금증이 생겼다. Layered Architecture 소프트웨어 개발에 일반적으로 사용되는 아키텍처이다. 계층형 아키텍처라고도 하는데, 계층의 숫자에 따라 N-tier Architecture라고도 할 수 있다. 💡 아키텍처란 ? 시스템의 구조, 동작을 정의하는 개념적인 모형이다. 레이어드 아키텍처는 계층형을 통해서 시스템의 구조, 동작을 정의한다. 계층형 아키텍처는 수직적인 구조로 여러 계층을 각각의 역할에 따라 나눌 수 있다. 이렇게 나눔으로써 각각의 계층은 자신에게 맞는 역할만 수행하게 되고 이에 따라 유지보수와 테스트하기가 용이하다. 계층이 어떻게 나뉘는가 ? 계층자체의 역할, ..

    [JAVA] 정적 팩토리 메소드

    들어가며 우테코를 시작하고 난 이후로 정적 팩토리 메소드 라는 말을 많이 들어왔다. 이펙티브 자바 책을 보면 첫 장이 정적 팩토리 메소드인 만큼 한번 쯤 알고 싶었고, 이번 체스 미션에서 사용해보았기에 정리해보려고 한다. 정적 팩토리 메소드 란 ? 우리는 흔히 인스턴스 객체 생성을 하는데 생성자를 사용한다. new ~~() 이런식으로 작성을 하는데 이를 생성자가 아닌 정적(static)메소드로 하는 것을 정적 팩토리 메소드라고 한다. 체스미션에서 사용한 정적 팩토리 메소드이다. 이를 통해 Command를 만들었다. public static Command of(String command) { return validateCommand(command); } 정적 팩토리 메소드를 왜 사용하는가 ? 장점 이름을 ..

    [디자인 패턴] 상태 패턴

    들어가며 체스 미션을 진행하면서 상태 패턴을 사용하였다. 상태 패턴을 적용한 이유는 체스 게임이 시작, 종료, 진행 상태로 나누어진다고 생각하였다. 이에 대해 정리해보려고 한다. 상태 패턴 내부 상태를 바꿈으로써 객체가 행동을 바꿀 수 있게 해준다. 별도의 클래스로 캡슐화 한 후 다음 상태를 나타내는 객체에게 행동하도록 요구하여 상태를 변경할 수 있따. 체스 미션에는 시작, 진행, 종료 상태가 있다. 이 상태에 따라 코드를 구현하고자 한다면 final static int START = 0; final static int RUNNING = 1; final static int END = 2; int state = END; public void start(){ if (state == start) { state..

    [Gradle] dependency 차이점 (CompileOnly, RuntimeOnly, api, implementation)

    들어가며 DB를 연동하면서 Gradle 에 runtimeOnly 'mysql:mysql-connector-java:8.0.28' 의존성을 추가해주었다. 아무 생각 없이 사용하였었는데 리뷰어인 토니로부터 이렇게 퀴즈를 받게 되었다 ! Classpath 클래스 혹은 Jar파일이 존재하는 위치이다. gradle의 Dependencies는 compieClasspath, runtimeClasspath, testCompileClasspath, testRuntimeClasspath 로 구분이 된다. 앞 2개는 로직을 실행할 때, 뒤 2개는 test 로직을 수행할 때 사용된다. CompileCalsspath 컴파일을 잘 수행하기 위해 필요한 클래스 및 jar을 나타낸다. RuntimeClasspath 런타임시 애플리..

    [JAVA] 캐싱

    들어가며 블랙잭 미션을 하면서 캐싱이라는 말을 처음 들어보았다. 내가 아는 Cache는 메모리 관련 내용 밖에 없었는데 자바에서 듣게 되니 궁금해서 알아보게 되었다. 캐시 캐시 란 데이터, 값을 미리 복사해 놓는 임시 장소를 의미한다. 이렇게 복사를 해놓는 이유는 미리 복사를 해 놓음으로써 값을 다시 계산하거나, 데이터에 접근하는 시간을 줄일 수 있다. 빠르게 데이터에 접근할 수 있는 것이다. 캐싱 캐싱이란 위에서 말한 ‘캐시’를 하는 것이다. 체스 미션에서의 캐싱 나의 체스 미션은 FILE & RANK 라는 행열로 이루어진 보드판 위에서 진행하는 게임이었다. 이는 enum타입으로 진행하였다. 처음에는 ‘a~h’ , ‘1~8’로만 enum을 만들어 놓고 사용자가 입력한 값에 대해서 그때 그때 찾는 방식으..

    [JAVA] 상속 과 조합

    들어가며 자바에는 상속이라는 개념이 있다. 우테코 과제를 진행하면서 상속을 사용했더라면 더 좋았을텐데.. 했지만 시간의 부족함으로 처리하지 못했다. 그래서 상속을 한번 정리해보기로 했다. 상속 자바에는 부모클래스와 자식클래스가 있다. 자식 클래스는 부모 클래스의 멤버를 상속받아 그대로 사용할 수 있다. 상속을 하는 이유 ? 이미 만들어져 있는 클래스를 재사용 할 수 있어서 효율적이고 중복된 코드가 줄어든다. 유지보수가 쉽고, 확장성이 용이하고, 재사용이 가능하고, 코드가 간결해진다. 클래스 상속 자식 클래스 이름 앞에 extends 키워드를 사용한다. 다중상속을 허용하지 않는다. //부모 public class Parent { ... }; //상속받은 자식 public class Child extends..

    [JAVA] VO(Value Object) 란 무엇인가 ?

    들어가며 VO란 값 객체로만 알고 있었다. 값을 가진 무언가? 라는 개념으로 이해했는데 이에 대해 조금 더 자세히 알고 싶어서 정리해보게 되었다. VO란 ? VO란 값을 가지는 객체. 즉 값 자체로 의미를 갖는 객체이다. 속성 값이 모두 같으면 객체이다. 불변이다. VO를 사용하는 이유 원시값 타입이 도메인 객체를 모델링 하기에 충분하지 않기에 사용한다. 도메인에서 의미있는 값으로 VO를 묶어서 사용해야 한다. 여기서 든 의문은 원시값 포장과 다른점이 뭐지? 라는 것이였다. VO 의 필수조건은 먼저 equals & hashCode 메서드를 재정의 수정할 수 없는 불변 이다. 그러므로 변수를 수정하는 로직이 있다면 이는 VO가 아니다. 원시 타입의 기능을 사용하지 않기에 VO를 사용한다. private f..