프로그래밍 패러다임과 구조적 프로그래밍
구조적 프로그래밍(Structed Programming) 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 최초로 적용된 패러다임이다. 데이크스트라는 무분별한 점프(goto)는 프로그램 구조에 해롭다는 사실을 제시했다. 이러한 점프문들을 if/then/else와 do/while/until과 같은 구조로 대체했다. 객체 지...
구조적 프로그래밍(Structed Programming) 구조적 프로그래밍은 제어흐름의 직접적인 전환에 대해 규칙을 부과한다. 최초로 적용된 패러다임이다. 데이크스트라는 무분별한 점프(goto)는 프로그램 구조에 해롭다는 사실을 제시했다. 이러한 점프문들을 if/then/else와 do/while/until과 같은 구조로 대체했다. 객체 지...
상태 패턴 전략 패턴과 유사한 구조를 가진다. 추상화한 인터페이스와 해당 인터페이스를 구현한 클래스(상태 객체)를 만들고, 컨텍스트(context)는 상태 객체에 처리를 위임하는 방식으로 구현된다. 예제 코드 상태 패턴 사용 전 public class VendingMachine { public static enum State { N...
전략 패턴(Strategy Pattern) 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다. 변하지 않는 것은 context에, 변하는 부분은 Strategy라는 인터페이스로 선언하여 구현체를 생성하여 문제를 해결한다. 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 ...
템플릿 메소드 패턴 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다. 변하지 않는 것은 추상클래스의 메서드로 선언, 변하는 부분은 추상 메서드로 선언하여 자식 클래스가 오버라이딩 하도록 처리한다. 이렇듯이 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는...
프로세스 작업 I/O Bound : 소켓 사용, 데이터베이스 연결, 가상 메모리 스와핑 등 CPU Bound : 수치 계산, 정규 표현식 처리, 가비지 컬렉션 등 프로그램 성격 프로그램이 주로 프로세서 연산에 시간을 보낸다면, 새로운 하드웨어를 추가해 성능을 높여야 한다. 스레드를 늘린다고 빨라지지 않는...
코드 냄새 주석 부적절한 정보 다른 시스템(소스 코드 관리 시스템 등)에 저장할 정보는 주석으로 부적절하다. 일반적으로 작성자, 최종 수정일, SPR(Software Problem Report)와 같은 메타 정보만 주석으로 넣는다. 쓸모 없는 주석 오래된 주석, 엉뚱한 주석, 잘...
환경 추상화 스프링이 제공하는 environment abstraction(환경 추상화)이란 무엇인가? 애플리케이션이 동작하는 환경은 목적이나 사용자에 따라서 조금씩 다르다. 스프링은 동작 환경에 맞춰서 코드를 매번 수정하지 않더라도, 애플리케이션의 구성 설정을 바꿀 수 있는 매커니즘을 제공한다. 어떤 빈들을 사용할 것인지 프로파일(또는 프로필)이라...
스프링 부트가 제공하는 자동 구성 정보 전 게시물의 마지막 부분에서는 자동 구성 정보를 외부 파일에서 읽은 후, 동적으로 자동 구성을 등록하도록 했었다. 이 기능을 만들기 위해 MyAutoConfiguration 애노테이션 클래스를 만들고, 이 클래스의 full path+name 으로 만들어진 텍스트 파일(resources/META_INF/spring...
빈 오브젝트의 역할과 구분 애플리케이션 빈: 개발자가 어떤 빈을 사용하겠다고 명시적으로 구성 정보를 제공한 것을 말한다. 컨테이너 인프라스트럭처 빈: 스프링 컨테이너 자신이거나, 스프링 컨테이너가 계속 기능을 확장하면서 추가해온 것들을 빈으로 등록시켜서 사용하는 빈들. 개발자가 이런 빈들을 등록 해달라고 요청하지 않지만, 컨테이너가 스스로 ...
1. 메타 애노테이션(Meta-annotation) 메타 애노테이션이란 애노테이션 위에 붙은 애노테이션이라는 뜻이다. 보통 애노테이션은 클래스나 메소드 앞에 붙지만, 애노테이션 위에도 애노테이션을 또 붙일 수 있다. 이때 애노테이션 위에 붙어있는 애노테이션을 ‘메타 애노테이션’이라 한다. 2. 합성 애노테이션(Composed-annotation) ...