본문 바로가기

전체 글

객체지향 5대 원칙 SOLID 객체 지향 설계의 정수라고 할 수 있는 5대 원칙으로 SOLID가 있다. 아래 원칙들은 응집도는 높이고, 결합도는 낮추는 고전 원칙을 객체지향의 관점에서 재정립 한 것이다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 SOLID는 제품이 아닌 개념이기에, 보는 사람의 관점에 따라 다르게 해석 될 수 있다. SRP - 단일 책임 원칙 Sing.. 더보기
Mybatis Executor, PreparedStatement Mybatis의 Executor type에는 SIMPLE, REUSE, BATCH 3가지가 존재한다. 공식문서의 설명은 아래와 같다. ExecutorType.SIMPLE: 이 타입의 실행자는 아무것도 하지 않는다. 구문 실행마다 새로운 PreparedStatement를 생성한다. ExecutorType.REUSE: 이 타입의 실행자는 PreparedStatements를 재사용할 것이다. ExecutorType.BATCH: 이 실행자는 모든 update구문을 배치처리하고 중간에 select 가 실행될 경우 필요하다면 경계를 표시한다. 이러한 과정은 행위를 좀더 이해하기 쉽게 하기 위함이다. 매퍼 설정 디폴트 실행자(executor) 설정. SIMPLE 실행자는 특별히 하는 것이 없다. REUSE 실행자는 .. 더보기
Java 프로그램 개발과 구동 JDK는 플랫폼에 독립적이지 않다. 각 운영체제, 환경 별로 다른 버전이 필요하다. 하지만 각 플랫폼 별로 다른 목적(실행) 파일을 만들지는 않는다. 이에 대해서 알아보자. C 언어의 개발과 구동 Java 이전 언어인 C 언어의 소스(코드) 파일 와 목적(실행) 파일은 어땠을까? C 언어는 하나의 소스 파일이 존재하고, 각 플랫폼 별 컴파일러가 해당 플랫폼에서 실행 가능한 목적 파일을 생성한다. 이는 이 전 플랫폼 별 소스 파일, 컴파일러, 목적 파일이 필요하던 어셈블리어 에서 개선된 형태이다. 장점 하나의 소스 파일만 작성하면 된다. 단점 각 플랫폼 별 컴파일러가 필요하다. 각 플랫폼 별 목적 파일이 생성된다. Java 언어의 개발과 구동 Java는 기존 C 언어의 불편함을 개선했다. 하나의 소스 파일.. 더보기
JVM, JDK, JRE 란? JDK, JRE, JVM? 처음 자바 개발을 하다 보면 생소한 단어들을 듣게 된다. Java를 다운 받으려고 하는데 어떤걸 받아야 할까? 기초적인 내용을 알아보자. JVM (Java Virtual Machine) 말 그대로 가상 머신이다. 자바 바이트 코드가 실행 될 수 있는 런타임 환경을 제공한다. JVM은 플랫폼에 독립적이지 않다. 각 OS 플랫폼 별로 다른 JVM을 설치 해야 한다. JVM은 대표적으로 아래와 같은 기능을 수행한다. 코드를 읽어들인다. 코드를 검증한다. 코드를 실행한다. 런타임 환경을 제공한다. JRE (Java Runtime Environment) 자바 실행 환경을 뜻한다. Java 프로그램 실행기인 java.exe를 포함한다. JVM의 구현체이다. JRE는 JVM과 다르게 물리적.. 더보기
컨테이너와 IoC, DI 란? 스프링을 공부하면 처음 접하는 용어들이 있다. 컨테이너, IoC, DI 등 용어들에 대해서 간단하게 다뤄보자. IoC(Inversion of Control)란? IoC는 Inversion of Control의 줄임 말로, 제어의 역전이라는 뜻이다. 프로그램의 흐름을 개발자가 제어하지 않고, 프로그램이나 프레임웤이 직접 제어를 한다는 말이다. 컴포넌트의 의존 관계 결정(Component dependency resolution), 객체의 생명 주기(life cycle)와 같은 일을 대신 수행해준다. 흔히 스프링 프레임웤을 이용해서 개발할 때 여러가지 Bean을 사용 할 것이다. 사용자의 요청이 들어오면, 요청에 알맞은 Bean을 생성해서 필요한 일을 하도록 시킨다. 해당 Bean이 할 일을 마치면 Bean을.. 더보기
REST API의 기초 REpresentational State Transfer Application Programming Interface REST API란 HTTP 기반 자원에 접근하는 방식을 정한 아키텍쳐이다. 탄생 배경 HTTP가 설계의 우수성에 비해 제대로 사용되지 않아서, 웹의 장점을 활용할수 있는 아키텍처 REST를 발표했다. 장/단점 장점 언어와 플랫폼에 독립적이다. SOAP보다 개발이 쉽고 단순 REST가 지원하는 프레임웍이나 언어등 도구가 없어도 구현 가능 기존 웹 인프라 사용 가능. HTTP그대로 사용 단점 HTTP만 사용 가능 p2p통신모델을 가정했기 때문에 둘 이상을 대상으로 하는 분산환경엔 유용하지 않음 보안, 정책등에 표준이 없어서 관리가 어렵다. 이 부분까지 고려하면 설계나 구현이 어렵다. REST.. 더보기
Layered Architecture in DDD Layered Architecture의 목적 관심사의 분리. 각 계층간의 관심사를 분리하기 위함이다. 기술과 로직이 분리가 안돼있다면 유지관리가 힘들다. 핵심원칙 같은 계층, 아래 계층 요소에만 의존한다. (상위계층에 의존하지 않는다) Layer 종류 User Interface Layer Application Layer Domain Layer Infrastructure Layer User Interface Layer(사용자 인터페이스 계층 or 표현 계층) 사용자에게 정보를 보여주고, 사용자의 명령을 해석한다. 유일하게 사용자가 접근 가능한 계층이다. Application Layer(응용 계층) 소프트웨어가 수행할 작업을 정의하고, 도메인이 문제를 해결하게 한다. 업무규칙, 지식은 포함되지 않는다. 도메.. 더보기
Entity, VO, DTO 엔티티 Entity 엔티티는 식별 가능한 객체이다. 쉽게말해 식별자를 가지고 있는 객체이다.이 식별자는 소프트웨어 생애 주기 내에 동일하게 유지된다.다른 말로 '연속적으로 식별성을 가진다', '모델의 생명주기를 가진다' 라고 할 수 있겠다. 식별자는 엔티티마다 고유해서 각 엔티티는 서로 다른 식별자를 가진다. 엔티티의 속성이 변경되더라도 한번 생성된 엔티티는 동일한 엔티티이다. 엔티티는 모델 스스로 처리 가능한 비즈니스 로직을 수행하는 역할을 한다. 아래 코드를 보자. public class Entity { private final long id; private String name; public Entity(long id, String name) { this.id = id; this.name = nam.. 더보기