
싱글톤 패턴: 인스턴스 하나만 생성해야할 객체를 위한 패턴 개발 요구 사항: 개발 중에 시스템에서 스피커에 접근할 수 있는 클래스 생성 public class SystemSpeaker { static private SystemSpeaker instance = new SystemSpeaker(); private SystemSpeak() { } public static SystemSpeaker getInstance() { return instance; } } 이렇게 하면 안된다 public class SystemSpeaker { static private SystemSpeaker instance; private SystemSpeak() { } public static SystemSpeaker getInsta..
@Builder Builder는 오브젝트 생성을 위한 디자인 패턴 롬복이 제공하는 해당 어노테이션을 사용하면 Builder 클래스를 따로 개발하지 않고 Builder 패턴 사용해 오브젝트 생성 이렇게 빌더 패턴을 사용하는 것은 생성자를 이용해 오브젝트를 생성하는 것과 비슷하다. 생성자를 이용하는 것과 비교해 장점이 있다면 생성자 매개변수의 순서를 기억할 필요가 없다는 점. EXAMPLE CODE Car sonata = Car.builder() .id("가2056나") .userId("강백호") .title("ef sonata") .build(); @NoArgsConstructor 매개변수가 없는 생성자를 구현 EXAMPLE CODE public Car() { } @AllArgsConstructor 클래스..
프론트 컨트롤러 패턴 소개 - MVC 프레임워크 업그레이드 도입 전 클라이언트가 공통 로직들을 설정하고 컨트롤러 로직을 별도로 설정 - 입구가 없기 떄문에 아무데나 들어올 수 있기 때문에 공통 로직을 다 만들어야 함. 도입 후 서블릿을 하나 도입하면 공통 로직을 별도로 모아서 한꺼번에 처리할 수 있는 컨트롤러를 도입 프론트 컨트롤러를 통해 각 컨트롤러를 호출. 특징. 1. 서블릿을 하나 둬서 클라이언트의 요청을 받음 2. 프론트 컨트롤러가 서블릿 요청을 다 받게 만들어서 추가로 호출 3. 공통 처리 가능 4. 프론트 컨트롤러만 서블릿을 사용함 - 요청 매핑, 다른 컨트롤러는 서블릿으로 만들 필요 없음. 스프링 웹 MVC와 프론트 컨트롤러 - 스프링 웹 MVC의 핵심도 FrontController - 스프..
입 / 출력 장치를 위한 인터페이스의 필요성 플랫폼은 직접 사용할 수 없으며 인터페이스를 사용해서 이용한다. (프로그래밍 언어) 인터페이스 - 함수 형태 프로그램 - 절차 ( 고급언어) - 연산자, 제어구조, 변수, 배열 절차언어 - 프로그램 - API - 플랫폼 Java Platform System.out 객체 write, print, println, printf System.in 객체 read, skip, reset out-in (Stream 객체) 출력 스트릠(Output Stream)을 이용한 비동기 처리 여러 개의 프로그램이 동시에 실행되고 있음 동시에 작업이 들어올 때 어떻게 처리할까? 줄세우기로 해결 줄세우기를 해결할 수 있는 방법 Buffer를 이용해서 해결 실행 환경 출력 버퍼를 이용해서..
public enum Grade { //BASIC, //VIP } public class Member { private Long id; private String name; private Grade grade; // 생성자를 만들어줌 public Member(Long id, String name, Grade grade) { this.id = id; this.name = name; this.grade = grade; } // Getter Setter 만들어줌. public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setNam..
다시 스프링으로 스프링 이야기에 왜 객체 지향 이야기가 나오는가? - 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 - DI(Dependency Injection): 의존관계, 의존성 주입 - DI 컨테이너 제공 (자바의 객체들을 어떤 컨테이너 안에 넣어놓고 의존관계를 연결하고 주입해주는 기능을 제공) - 클라이언트 코드의 변경 없이 기능 확장 - 쉽게 부품을 교체하듯이 개발 스프링이 없던 시절로 - 옛날에 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면서 개발을 해보니, 너무 할 일이 많았다. 배보다 배꼽이 크다. 그래서 프레임워크로 만들어버림 - 순수하게 자바로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 스프링 프레임워크를 만들게 된다. ( 더..
1. SRP 단일 책임 원칙 - Single Responsibility Principle - 한 클래스는 하나의 책임만 가져야 한다. - 하나의 책임이라는 것은 모호하다. - 클 수 있고 작을 수 있다. - 문맥과 상황에 따라 다르다. - 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 - 예) UI 변경, 객체의 생성과 사용을 분리 - (sql코드부터 시작해서 애플리케이션 코드까지 다 고쳐야 해? 그러면 잘못 설계한 것이다.) 2. OCP 개방/ 폐쇄 원칙 - Open/Closed Principle - 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. - 이런 거짓말 같은 말이? 확장을 하려면, 당연히 기존 코드를 변경? - 다형성을 활용해보..

객체 지향 특징 - 추상화 - 캡슐화 - 상속 - 다형성 객체 지향 프로그래밍 - 객체 지향 프로그래밍은 컴퓨터 프로르갬을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위. 즉 객체들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) - 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 유연하고, 변경이 용이? - 레고 블록 조립하듯이 - 키보드, 마우스 갈아 끼우듯이 - 컴퓨터 부품 갈아 끼우듯이 - 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 다형성 (Polymorphism) 다형성의 실세계 비유 -실세계와 객체 지향을 1:1로 매칭 x - 그래도 실세계의..

객체 지향 특징 - 추상화 - 캡슐화 - 상속 - 다형성 객체 지향 프로그래밍 - 객체 지향 프로그래밍은 컴퓨터 프로르갬을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위. 즉 객체들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. (협력) - 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 유연하고, 변경이 용이? - 레고 블록 조립하듯이 - 키보드, 마우스 갈아 끼우듯이 - 컴퓨터 부품 갈아 끼우듯이 - 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 다형성 (Polymorphism) 다형성의 실세계 비유 -실세계와 객체 지향을 1:1로 매칭 x - 그래도 실세계의..
스프링의 필수 : 스프링 프레임워크 , 스프링 부트 선택 스프링 데이터: 데이터베이스 - 기본적인 CRUD 비슷을 도와주는 기술(Spring Data JPA 많이 사용) 스프링 세션 : 세션 기능을 편리하게 도와주는 거 스프링 시큐리티: 보안 관련 스프링 Rest Docs: API 문서를 편리하게 해주는 거 스프링 배치: 실무에서는 천만명의 데이터를 실시간으로 업데이트 하는 거 어려움- 1000건 퍼올려서 저장 (배치 처리) -배치처리에 특화 스프링 클라우드 - 클라우드 기술에 특화 스프링 홈페이지: spring.io/projects Spring | Projects Spring Framework Provides core support for dependency injection, transaction m..
2000년대 초반 자바당 정파 기술 EJB - Enterprise Java Beans - (그 당시 오픈소스 지양) 1. 이론적인 부분은 좋았음. 2. JPA와 비슷 - ORM - 자바 객체에다가 디비를 편하게 꺼내는 기술 (쿼리를 안 씀) 3. 단점: 가격이 너무 비쌈. 4. EJB 지옥: 진짜 어렵고 개발자들이 사용하기 너무 복잡함 - EJB가 제공하는 인터페이스를 구현하고 의존적으로 개발해야 함 - 코드도 지저분, 라이프사이클이 어떻게 돌아가는 지 모르겠음 - 실행시간도 오래걸림 - 한마디로 지옥 5. EJB가 너무 느리고 복잡하니까 순수 자바로 돌아가자~! POJO - Plan Of Java Object(오래된 방식의 자바 오브젝트를 사용하자) - 예전으로 돌아가자 6. EJB가 제공하는 ORM은..
배열(Array)은 연관된 정보를 그룹핑 하는데 사용 배열의 개념 배열은 연관된 데이터를 모아서 관리하기 위해서 사용하는 데이터 타입 변수 vs 배열 변수 : 하나의 데이터를 저장 배열 : 여러 개의 데이터를 저장하기 위한 것 String[] classGroup = {"사과", "바나나", "딸기", "키위"}; classGroup이라는 String[] 문자열 배열에 {"사과", "바나나", "딸기", "키위"} 라는 배열이 담긴다. String[] classGroup = new String[4]; // 배열을 정의할 때 new를 사용하고 배열의 type: String, 배열의 크기 : 4 classGroup[0] = "사과"; // classGroup의 0번째 인덱스에 "사과" 문자열을 저장 Syste..
클래스 1. 설계도 2. 데이터 + 함수 3. 사용자 정의 타입 2. 클래스 == 데이터 + 함수 변수: 하나의 데이터를 저장할 수 있는 공간 배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간 구조체: 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간 클래스: 데이터와 함수(메서드)의 결합 (구조체 + 함수) - 서로 관련 있는 데이터와 메서드 3. 사용자 정의 타입 - 원하는 타입을 직접 만들 수 있다. int hour; int minute; int second; Time t = new Time(); int hour1, hour2, hour3; int minute1, minute2, minute3; int second1, second2, second3; Time t1 =..

객체 배열 == 참조변수 배열 Computer com1, com2, com3; Computer[] comArr = new Computer[3]; // 길이가 3인 Computer타입의 참조변수 배열 컴퓨터 타입 참조변수 x 3 ComputerArr ComputerArr[0] ComputerArr[1] ComputerArr[2] 0x100 null null null 0x100 // 객체를 생성해서 배열의 각 요소에 저장 computerArr[0] = new Computer(); computerArr[1] = new Computer(); computerArr[2] = new Computer(); 해당 코드가 실행이 되면 객체가 새로 생성이 되고 배열의 요소에 각 객체의 주소들이 저장이 된다. Computer..