본문 바로가기

전체 글

(208)
애그리게이트 애그리게이트란? 객체지향 프로그래밍에서는 여러개의 객체가 모여 한 가지 의미를 갖는 하나의 객체가 된다. 이렇게 객체가 모여 이룬 객체는 어떤 불변조건(어떤 처리를 수행하는 동안 참을 유지해야 하는)을 유지해야 한다. 이 불변 조건은 언제나 유지돼야 하지만, 객체가 가진 데이터를 변경하는 조작을 무제한 허용하면 이를 유지하기 어렵다. 따라서 객체를 다루는데도 질서가 필요하다. 애그리게이트는 경계와 루트를 갖는다. 애그리게이트의 경게는 애그리게이트에 포함되는 대상을 결정하는 경계다. 그리고 루트는 애그리게이트에 포함되는 특정한 객체이다. 외부에서 애그리게이트를 다루는 조작은 모두 루트를 거쳐야한다. 애그리게이트에 포함되는 객체를 외부에 노출하지 않음으로서 불변 조건을 유지할수 있다. User | | V V..
자바 코딩의 기술 - #2 코딩 스타일 2.1 매직 넘버를 상수로 대체 void setPreset(int speedPreset) { if (speedPreset == 2) { setTargetSpeedKmh(16944); } else if (speedPreset == 1) { setTargetSpeedKmh(7667); } else if (speedPreset == 0) { setTargetSpeedKmh(0); } } 변경 static final int STOP_PRESET = 0; static final int PLANETARY_SPEED_PRESET = 1; static final int CRUISE_SPEED_PRESET = 2; static final double STOP_SPEED_KMH = 0; static final double..
자바 코딩의 기술 - #1 코드 정리 1.1 쓸모없는 비교 피하기 if(microscope.isInorganic(sample) == true) 변경 if(microscope.isInorganic(sample) 불 표현식은 불 원시값과 비교하지 않아도 된다. 1.2 부정피하기 if(!microscope.isHumanoid(sample)) { retrun Result.ALIEN; } else { retrun Result.HUMANOID; } 변경 if(microscope.isHumanoid(sample)) { retrun Result.HUMANOID; } else { retrun Result.ALIEN; } 코드를 읽을때 일반적으로 긍정 표현을 이해하기가 더 쉽다. 1.3 boolean 표현식을 직접 반환 boolean isValid() { i..
스프링 부트 기본-#2 자동설정 자동설정은 스프링 부트의 장점이며 매우 중요한 역할. 스프링 부트 자동 설정은 web, h2, jdbc 등 여러개의 자동설정을 제공한다. h2 의존성이 클래스 경로에 존재한다면 자동으로 인메모리 데이터베이스에 접근한다. 자동환경설정 어노테이션 기존의 스프링 프레임워크를 사용했다면 의존성을 일일이 bean으로 설정했어야 한다. 스프링 부트는 관련 의존성을 스타터라는 묶음으로 제공하며 수동 설정을 지양한다. @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @Compon..
스프링 부트 기본-#1 스프링 부트 특징 임베디드 톰캣, 제티, 언더토우를 사용하여 독립 실행이 가능한 스프링 애플리케이션 개발 통합 스타터를 제공하여 메이븐/그레이들 구성 간소화 스타터를 통한 자동화된 스프링 설정 제공 JAR를 사용하여 자바 옵션마으로도 배포 가능 애플리케이션의 모니터링과 관리를 위한 스프링 액츄에이터 제공 장점 각각의 의존성 버전을 올리는 것이 수월 (스프링 부트의 버전이 올라갈때마다 각 버전의 호환성에 대한 충분한 테스트를 거치고 릴리스 되기 때문) 간단한 어노테이션 설정이나 프로퍼티 설정으로 세부적인 설정 없이 원하는 기능을 빠르게 적용 별도의 외장 톰캣을 설치할 필요가 없으며 톰캣버전도 더욱 편리하게 관리 단점 설정을 개인화(커스터마이징)하면 버전을 올릴때 기존 스프링 프레임워크를 사용하는 것과 동일..
Spring MyBatis사용 및 설정 Mybatis Mybatis 의존설정 기존 스프링 기반에서는 Mybatis.jar, Mybatis-Spring.jar 사용. 스프링 부트 기반에서는 mybatis-spring-boot-starter를 사용. compile ('org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3') implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3' Mybatis에서는 쿼리 매핑 구문을 실행하기 위해 sqlSession 객체를 사용 sqlSession 객체를 생성하기 위해 SqlSessionFactory를 사용. 스프링과 같이 사용할때는 SqlSessionTemplate를 사용. why? 스..
IoC 컨테이너 계층 구조 - 토비의 스프링 IoC 컨테이너 계층 구조 빈을 담아둘 IoC 컨테이너는 애플리케이션마다 하나씩이면 충분하다. 그러나 한 개 이상의 IoC 컨테이너를 만들어두고 사용해야 할 경우가 있다. 부모 컨테이너를 이용한 계층구조 효과 루트 애플리케이션 컨텍스트 ^ ^ | | 애플리케이션 컨텍스트 A1 애플리케이션 컨텍스트 A2 ^ | 애플리케이션 컨텍스트 B1계층 구조 안의 모든 컨텍스트는 각자 독립적인 설정정보를 이용해 빈 오브젝트를 만들고 관리한다. 각자 독립적으로 자신이 관리하는 빈을 갖고 있긴 하지만 DI를 위해 빈을 찾을때 부모 애플리케이션 컨텍스트의 빈까지 모두 검색한다. 자신이 관리하는 빈 중에서 찾고 없으면 부모 컨텍스트(A1)에 빈 찾기 요청을 한다. 없으면 그 위의 부모 컨텍스트(루트)에게 다시 요청한다. 그래..
IoC 컨테이너와 DI - 토비의 스프링 IoC 컨테이너와 DI 스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 스프링 컨테이너 = IoC 컨테이너 IoC를 담당하는 컨테이너를 빈 팩토리 또는 애플리케이션 컨텍스트라고 부른다. 스프링의 IoC 컨테이너는 일반적으로 애플리케이션 컨텍스트를 말한다. BeanFactory 인터페이스 ApplicatioinContext 인터페이스 빈 컨테이너 StaticApplicationContext ac = new StaticApplicationContext(); 여기에 IoC 컨테이너로서 동작하려면? 클래스와 설정메타정보가 필요하다. IoC 컨테이너의..