새로운 구조와 할인 정책 적용 - 처음으로 돌아가서 정액할인 정책을 정률 (%) 할인 정책으로 변경해보자. - FixDiscountPolicy > RateDiscountPolicy : 어떤 부분만 변경하면 될까? "AppConfig"의 등장으로 애플리케이션이 크게 사용영역과, 객체를 생성하고 구성(Configuration)하는 영역으로 분리되었다. 따라서 구성영역의 코드만 고치면 됨 !!! - `FixDiscountPolicy` > `RateDiscountPolicy` 로 변경해도 구성 영역만 영향을 받고, 사용영역은 전혀 영향을 받지 않는다. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount...
관심사의 분리 - 애플리케이션을 하나의 공연이라 생각해보자. 각각의 인터페이스를 배역(배우역할)이라 생각했을때, 실제 배역 맞는 배우를 선택하는 것은 누구인가? - 로미오와 줄리엣 공연을 하면 로미오 역할을 누가 할 지 줄리엣 역할을 누가 할지는 배우들이 정하는것이 아님 - 이전 코드는 마치 로미오 역할 (인터페이스)을 하는 레오나르도 딭카프리오(구현체,배우)가 줄리엣 역할(인터페이스)을 하는 여자주인공(구현체, 배우)을 직접 초빙하는 것과 같았음. - 디카프리오는 공연도 해야하고 동시에 여자주인공도 공연에 직접 초빙해야하는 "다양한 책임"을 가지고 있었다. >> 관심사를 분리하자 - 배우는 본인의 역할인 배역을 수행하는 것에만 집중해야한다. - 디카프리오는 어떤 여자주인공이 선택되더라도 똑같이 공연을 ..
https://start.spring.io/ 우선 위 사이트에 접속해서 스프링 초기 환경설정을 해준 뒤 GENERATE 버튼을 눌러서 다운받아준다. (설정은 위 화면과 동일하게 하였는데, 추후에 버전이 바뀌게 되어 현재와 버전이 다를수도 있다. 그럴땐 그 상황에서의 가장 안정적인 버전으로 하면 되는데, 그 기준은 (SNAPSHOT) 이 붙이 않은 것이 기준이며, 3.xx 는 자바 17을 써야하기때문에 나는 11이 이미 깔려있어서 그냥 2.7 버전으로 했다.) 그리고 의존은 일부러 쌩으로 해보기 위해 하나도 안넣었다. 그러면 진짜 찐 기본 라이브러리만 받아진다. 압축된 파일을 풀어주고 파일 안으로 들어가보면 build.gradle이 있다. 그것을 인텔리제이 혹은 이클립스에서 열어주고 빌드 및 라이브러리 다..
📌 스프링 이야기에 왜 객체지향 이야기가 나오는가 ? - 스프링은 다음 기술로 다형성 + OCP,DIP를 가능하게 지원 ✔️ DI(Dependency Injection) : 의존관계, 의존성주입 ✔️ DI 컨테이너 제공 > 자바 객체들을 컨테이너 안에 넣어놓고 의존관계를 주입하고 제어해줌 - 클라이언트 코드의 변경없이 기능 확장 - 쉽게 부품을 교체하듯이 개발할 수 있음 📌 스프링이 없던 시절 - 옛날 어떤 개발자가 좋은 객체지향개발을 하려고 OCP,DIP 원칙을 지키면서 개발을 해보니, 배보다 배꼽이 크다. 그래서 프레임 워크로 만들어버림 - 순수하게 자바로 OCP,DIP 원칙들을 지키면서 개발을 해보면, 결국 스프링프레임워크를 만들게 된다 (정확히는 DI컨테이너) - DI개념은 말로 설명해도 이해가 ..
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 - SRP (Single responsibility principle): 단일 책임 원칙 - OCP(Open/closed principle) : 개방-폐쇄 원칙 - LSP(Liskov substitution principle) : 리스코프 치환 원칙 - ISP(Interface segregation principle) : 인터페이스 분리 원칙 - DIP(Dependency inversion principle) : 의존관계 역전 원칙 SRP (Single responsibility principle) 단일 책임 원칙 - 하나의 클래스는 하나의 책임만 가져야 한다. - 하나의 책임이라는 것은 모호하다. > 클 수 있고, 작..
객체지향의 특징 - 캡슐화 - 상속 - 추상화 - 다형성 객체지향 프로그래밍이란? 객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메세지를 주고받고 , 데이터를 처리할 수 있다. (협력) 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기때문에 대규모 스프트웨어 개발에 많이 사용된다. 유연하고 변경이 용이 컴포넌트를 쉽고 유연하게 변경하면서 개발 할 수 있는 방법 궁극의 유연함, 궁극의 변경 용이 >> 다형성 (Polimorphism) 다형성 역할과 구현으로 구분 실생활에서 비유 ) 운전자는 소나타를 타다가 테슬라 3로 바꾼다 > 그래도 운전 할 수 있음. 자동차라는 역할에 ..
Spring 이란? Java 의 웹 프레임워크로 Java 언어를 기반으로 사용한다. Java를 이용한 기술은 JSP,MyBatis,JPA 등 여러가지가 있는데 Spring은 이 기술들을 더 편하게 사용하기 위해 만들어졌다. Spring의 장점 1. 중복코드의 사용률 감소 2. 비즈니스 로직을 더 간단하게 해준다. 3.오픈소스를 보다 효율적으로 사용이 가능 => Java 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크 Spring 생태계 Spring은 어떤 특정한 하나가 아니라, 여러가지 기술들의 모음이다. - 스프링프레임워크 : 스프링의 핵심이 되는 기술 - 스프링부트 : 여러 스프링 기술들을 편리하게 사용하도록 도와줌 - 스트링 데이터 : DB 기술을 간단하게 도와주는 기술. 가장 많이 ..
SpreadJS 쓸 일이 생겨서 쓰는 김에 정리해본다. 공식 사이트를 보고 참고했으니 다들 참고하셔서 보시면 좋을 것 같다. Demos | SpreadJS JavaScript Demos Learn how you can easily add advanced spreadsheet capabilities to your JavaScript applications today to create financial, analysis, budgeting, forecasting, data collection, scientific and many other similar applications. Begin by selecting a featured demo www.grapecity.com 우선 프론트 연결까지만 만들어 볼 것..
Annotation이란? = 메타 데이터 (meta Data) : 애플리케이션이 처리해야할 데이터가 아니라, 컴파일 과정과 실행과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보 아래와 같은 형태로 작성된다. @Annotation Annotation 용도 컴파일러에게 코드 문법에러를 체크하도록 정보를 제공 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공 실행 시 (런타임 시) 특정 기능을 실행하도록 정보를 제공 컴파일러에게 코드문법 에러를 체크하도록 정보를 제공하는 대표적인 예는 @Overrride 어노테이션이다. @Override는 메서드 선언 시 사용하는데, 메소드가 오버라이드(재정의) 된 것임을 컴파일러에게 알려줘 컴파일러가 오버라이드 검사를 하도록 해..
WITH절 이란? WITH절은 이름이 부여된 서브쿼리 이며, CTE(Common Table Expression)를 표현하기 위한 구문이다. 임시테이블을 만든다는 관점에서본다면 VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한번 만들어놓으면 DROP할때까지 없어지지 않지만 WITH절의 같은경우 한번 실행할 쿼리문내에 정의되어 있을경우, 그 쿼리문안에서만 실행된다는 차이점이 있다. CTE(Common Table Expression) 란? 1. 기존의 View,파생 Table, 임시Table 등으로 사용되던 것을 대신할 수 있다. 2. 더 간결한 식으로 보여지는 장점이 있다. 3. CTE는 크게 비재귀적CTE, 재귀적CTE 두가지가 있다. 비재귀적 CTE : 재귀적이지 않은 CTE, 단순한 형태이며 ..