📗 BOOK/스프링 입문을 위한 자바 객체 지향의 원리와 이해 9

부록 B - 자바 8 람다와 인터페이스 스펙 변화

B.1 람다가 도입된 이유 람다를 지원하기 위한 인터페이스를 함수형 인터페이스라고 한다. B.2 람다란 무엇인가? 람다란 한 마디로 코드 블록이다. 코드 블록인 람다를 메서드의 인자나 반환값으로 사용할 수 있게 된다. 코드 블록을 변수처럼 사용할 수 있다는 것 public class B003 { public static void main(String[] args) { Runnable r = () -> { System.out.println("Hello Lambda 3!!!"); }; r.run(); } } 람다의 구조 (인자 목록) -> { 로직 } B.3 함수형 인터페이스 추상 메서드를 하나만 가지는 인터페이스를 함수형 인터페이스라고 한다. B.4 메서드 호출 인자로 람다 사용 public class B..

부록 A - 스프링 MVC를 이용한 게시판 구축

A.1 URL과 @RequestMapping 연결하기 스프링 MVC에서는 @Controller 어노테이션이 붙은 클래스 안에 @RequestMapping 어노테이션이 붙은 메서드에서 클라이언트 요청을 처리하게 된다. 클라이언트가 URL을 입력하고 웹 서버에 서비스를 요청하면 서블릿 컨테이너가 해당 URL의 웹 컨텍스트를 찾고, 해당 웹 컨텍스트는 스프링 ApplicationContext에게 URL 중에 /를 처리할 수 있는 @RequestMapping(value = "/")를 가진 메서드에게 처리를 위임한다. @ResponseBody는 반환하는 문자열을 그대로 클라이언트, 즉 브라우저에게 전달하라는 뜻이다. A.4 서비스 구현 DAO는 데이터베이스 테이블당 하나를 만들게 된다. 대부분의 경우 하나의 서비..

07 스프링 삼각형과 설정 정보

이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다. IoC/DI - 제어의 역전/의존성 주입 프로그래밍에서 의존성이란? 전체가 부분에 의존한다는 것과 프로그래밍에서 의존 관계는 new로 표현된다. 스프링 없이 의존성 주입하기 1 - 생성자를 통한 의존성 주입 의존성 주입을 하면 확장성이 좋아짐 스프링 없이 의존성 주입하기 2 - 속성을 통한 의존성 주입 최근에는 속성을 통한 의존성 주입보다는 생성자를 통한 의존성 주입을 선호하는 사람이 많음 -> 프로그램에서는 한번 주입된 의존성을 계속 사용하는 경우가 더 일반적이기 때문 스프링을 통한 의존성 주입 - XML 파일 사용 속성을 통한 의존성 주입 ApplicationContext를 통해 스프링 컨텍스트 생성 c..

06 스프링이 사랑한 디자인 패턴

어댑터 패턴(Adapter Pattern) 서로 다른 두 인터페이스 사이에 통신이 가능하도록 하는 것 스프링의 예시) JDBC/ODBC, 자바의 플랫폼별 JRE 어댑터 패턴은 합성 즉, 객체를 속성으로 만들어서 참조하는 디자인 패턴으로, 호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴 프록시 패턴(Proxy Pattern) 프록시 패턴의 경우 실제 서비스 객체가 가진 메서드와 같은 이름의 메서드를 사용하는데, 이를 위해 인터페이스를 사용한다. 인터페이스를 사용하면 서비스 객체가 들어갈 자리에 대리자 객체를 대신 투입하는 방식 대리자는 실제 서비스와 같은 이름의 메서드를 구현한다. 이때 인터페이스 사용 대리자는 실제 서비스에 대한 참조 변수를 갖는다. 대리자는 ..

05 객체 지향 설계 원칙 - SOLID

SOLID 원칙 SRP: 단일 책임 원칙 OCP: 개방 폐쇄 원칙 LSP: 리스코프 치환 원칙 ISP: 인터페이스 분리 원칙 DIP: 의존 역전 원칙 SRP - 단일 책임 원칙 하나의 클래스에 다수의 역할과 책임이 몰려 있는 것 보다, 클래스를 역할과 책임에 따라 분리해서 각각 하나의 역할과 책임만 갖게 하는 것. 단일 책임 원칙과 가장 관계가 깊은 것은 모델링 과정을 담당하는 추상화를 통해 클래스를 선별하고 속성과 메서드를 설계할 때 단일 책임 원칙을 고려해야 함. OCP - 개방 폐쇄 원칙 자신의 확장에는 열려 있고, 주변의 변화에는 닫혀 있어야 함. 상위 클래스 또는 인터페이스를 중간에 둠으로써, 자신의 확장에는 개방하고, 주변 변화는 폐쇄되어야 함. LSP - 리스코프 치환 원칙 하위 클래스의 인..

04 자바가 확장한 객체 지향

abstract 키워드 - 추상 메서드와 추상 클래스 추상 클래스는 인스턴스, 즉 객체를 만들 수 없다. 즉 new를 사용할 수 없다. 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다. 오버라이딩 강제 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다. 생성자 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다. 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다. 클래스 생성 시의 실행 블록, static 블록 클래스 생성자는 존재하지 않는다. 클래스 정보는 해당 클래스가 코드에서 맨 처음 사용될 때 T 메모리의 스태틱 영역에 로딩되며, 이때 단 한번 해당 클래스의 static 블록이 실행된다. 왜 프로그램이 실행될..

03 자바와 객체 지향

객체 지향의 4대 특성 캡 - 캡슐화: 정보 은닉 상 - 상속: 재사용 추 - 추상화: 모델링 다 - 다형성: 사용 편의 클래스와 객체 클래스는 분류에 대한 개념이지 실체가 아니다. 객체는 실체다. 추상화: 모델링 객체: 세상에 존재하는 유일무이한 사물 클래스: 분류, 집합, 같은 속성과 기능을 가진 객체를 총칭하는 개념 객체는 유일무이한(unique)한 사물이다. 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이다. 속성: 명사로 표현되는 특성, 값을 가질 수 있음. 메서드: 기능/행위 추상화란 구체적인 것을 분해해서 관심 영역(Application Boundary)에 있는 특성만 가지고 재조합 하는 것 자바는 객체 지향의 추상화를 어떻게 지원하고 있을까? 바로 class 키워드를 통해 지..

02. 자바와 절차적/구조적 프로그래밍

이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다. JDK : Java Development Kit / 자바 개발 도구 JRE: Java Runtime Environment / 자바 실행 환경 JVM: Java Virtual Machine / 자바 가상 기계 프로그램이 메모리를 사용하는 방식 -> 코드 실행 영역 / 데이터 저장 영역으로 나뉨 자바에서는 왜 goto를 사용하지 못하게 한 것일까? goto를 사용하게 되면 프로그램의 실행 순서가 인간이 이해하기에 너무 복잡해질 가능성이 있음. 함수는 객체 지향 언어에서라면 메서드와 같은 것 함수와 메서드는 다르지 않다. 다시 보는 main() 메서드: 메서드 스택 프레임 스태틱 영역 - 클래스들의 놀이터 스택 ..

01. 사람을 사랑한 기술

이 글은 스터디 내에서 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 읽고 정리한 글입니다. C++ 언어 - 정말 인간적인 프로그래밍 방법론, 객체 지향 C++는 C에 객체 지향 개념을 도입함으로써 역사에 한 획을 그은 언어가 되었음. 자바 - 진정한 객체 지향 언어 자바에서는 클래스를 떠나 존재할 수 있는 것이 아무것도 없음. 자바와 C#은 가상 머신(Virtual Machine)을 지원함. -> Write Once Use Anywhere 자바의 경우 단 하나의 컴파일러만 필요하고, 기종별 JRE 세팅 필요 UML을 대하는 자세 UML은 의사소통의 도구이며, 표기 방법론일 뿐이다. CBD(Component Based Development) 컴포넌트 기반 개발: 애플리케이션을 통째로 개발하지 말고,..