전체 글 (82) 썸네일형 리스트형 Effective Java - Item 42. 익명 클래스보다는 람다를 사용하라 이전의 자바 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스의 인스턴스를 함수객체(function object)라고 하여, 특정 함수나 동작을 나타내는 데 썼다. Collections.sort(words, new Comparator(){ public int compare(String s1, String s2){ return Integer.compare(s1.length(), s2.length()); } } });이 코드에서 Comparator 인터페이스가 정렬을 담당하는 추상 전략을 뜻하며, 문자열을 정렬하는 구체적인 전략을 익명 클래스로 구현하였다. 하지만 익명 클래스 방식은 코드가 너무 길기 때문에 자바는 함수형 프로그.. 더보기 토비의 스프링 vol.2 4장 @MVC 4장 스프링 @mvc 4.4 JSP 뷰와 form 태그 스프링 MVC 뷰 기술과 작성 방법은 매우 다양하다. 하지만 컨트롤러를 통해 준비된 모델 오브젝트를 활용해서 클라이언트가 보게 될 콘텐트를 작성한다는 면에서는 모두 동일하다. 이 절에서는 주로 폼을 이용한 뷰를 작성할 때 필요한 스프링 지원 기능에 대해 설명한다. 폼을 다룰 수 있는 뷰 기술 중 JSP/JSTL 만 설명한다. 4.4.1 EL과 SPRING 태그 라이브러리를 이용한 단순한 모델 출력 JSP EL(Expression Language) EL(Expression Language)은 자바 빈의 프로퍼티 값을 JSP의 표현식 이나 액션 태그 jsp:useBean를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술이다. 또한 static 메소.. 더보기 객체 지향 설계와 스프링 이 포스팅은 인프런 스프링 핵심 원리 - 기본편 강의를 정리한 내용입니다. 다시 스프링으로 스프링 이야기에 왜 객체 지향 이야기가 나오는가? 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection): 의존관계, 의존성 주입 DI 컨테이너 제공 : 자바 객체들을 컨테이너 안에 넣어서 의존관계를 주입해준다! 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 다시 스프링으로 스프링이 없던 시절로 옛날 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면서 개발을 해 보니, 너무 할일이 많았다. 배보다 배꼽이 크다. 그래서 프레임워크로 만들어버림 순수하게 자바로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 스프.. 더보기 SOLID - 좋은 객체지향 설계의 5가지 원칙 이 포스팅은 인프런 스프링 핵심 원리 - 기본편 강의를 정리한 내용입니다. SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과.. 더보기 좋은 객체 지향 프로그래밍이란? 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프 트웨어 개발에 많이 사용된다. 유연하고 변경이 용이한 프로그래밍이라는 것은 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법입니다. 다형성 다형성을 실세계로 비유하기 위해 실세계를 역할과 구현으로 구분을 해보겠습니다. 역할과 구현 예시 운전자와 자동차 : 운전자는 자동차의 인터페이스를 가지고 자동차를 운전한다. .. 더보기 값 객체, 금액, 레코드 집합 값 객체(Value Object) 금액이나 날짜 범위와 같이 동등성의 개념이 식별자에 기반을 두지 않는 작고 간단한 객체 참조 객체와 값 객체를 구분해서 생각하면 유용하다. 예를 들어 값 객체는 금액, 날짜와 같은 작은 객체이고 참조 객체는 주문, 고객과 같이 큰 객체이다. 특징 일반적으로 더 작다. 언어에서 제공되는 기본형(primitive type)과 비슷하다. 작동 원리 읽기 전용으로 만들어야 한다. (Aliasing bug 방지 : 공유 하는 값 객체에서 한 소유자가 변경을 하면 다른 소유자의 객체도 변경된다.) 완성된 레코드로 저장해서는 안 된다. (포함 값 사용) 사용 시점 식별자(identifier)가 아닌 다른 기준을 바탕으로 동등성을 판단하는 경우 값 객체를 사용한다. 생성하기 쉬운 모든.. 더보기 레지스트리 패턴, 특수 사례 패턴 레지스트리 다른 객체가 공용 객체와 서비스를 찾기 위해 사용하는 잘 알려진 객체 어떤 객체를 찾으려는 경우 찾으려는 객체와 연결된 다른 객체에서 시작해 이 연결을 따라 검색하는 것이 일반적이다. 예를들어 한 고객의 모든 주문을 찾으려면 고객 객체에서 주문을 얻는 메서드를 사용한다. 그런데 이렇게 출발점으로 사용할 적절한 객체가 없는 경우가있다. 레지스트리는 기본적으로 전역 객체이거나 보이는 것만큼 전역은 아닐 수 있지만 적어도 전역으로 보인다. 작동 원리 레지스트리의 정적 메서드를 통해서 필드에 접근한다. (필드까지 정적일 필요는 없다) 데이터의 범위 레지스트리의 데이터는 실행 컨텍스트별로 달라질 수 있다. 프로세스 범위의 레지스트리에서 일반적으로 사용되는 형태는 싱글턴이다. 이 경우 레지스트리 클래스는.. 더보기 분리 인터페이스 패턴, 플러그인 패턴 이 포스팅은 엔터프라이즈 애플리케이션 아키텍처 패턴 18장을 요약한 내용입니다. 분리 인터페이스(Seperated Interface) 구현과 분리된 별도의 패키지에 인터페이스를 정의한다. 시스템을 구성하는 부분 간의 의존성이 필요한 경우 인터페이스로 결합도를 최소한으로 가져가면서 의존할 수 있다. 작동원리 특정 객체에서 다른 객체의 기능이 필요할 때 직접 의존하지 않고 인터페이스를 통해서 의존하게 한다. 이 때 구현을 인스턴스화하기가 불편할 수 있는데 구현을 팩터리에 바인딩하는 플러그인 패턴을 사용하면 된다. (굳이 플러그인을 사용하지 않아도 됨) 사용 시점 프레임워크 패키지에 넣은 범용 추상 코드에서 특정한 애플리케이션 코드를 호출해야 한다. 한 계층의 코드에서 볼 수 없어야 하는 다른 계층의 코드를 .. 더보기 이전 1 ··· 3 4 5 6 7 8 9 ··· 11 다음