오전
자바의 디자인 패턴
디자인 패턴이란 ?
특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
특정한 소스나 기계코드는 아니고 , 여러 상황에 맞게 사용될 수 있는 문제들을 해결할 때 쓰이는 템플릿 같은 형식.
디자인 패턴은 개발자가 시스템을 디자인할 때 공통된 문제들을 해결하는데 쓰이는 형식화 된 가장 좋은 관행이다.
(간단하게 보고 넘어가자)
디자인 패턴의 종류
- 생성 패턴
- 싱글톤(중요) : 클래스의 인스턴스가 1개여야만 하는 패턴
- 인스턴스 생성을 제어할 수 있어야한다.
- 유일한 인스턴스에 쉽게 접근할 수 있어야한다.
- 빌더(중요) : 복잡한 객체의 생성방법과 표현방법을 분리하기 위해 사용
- 별도의 builder 클래스를 만들어 값을 입력받아 최종적으로 build() 메서드를 통해 인스턴스를 생성해서 리턴한다.
- 팩토리 메서드
- 추상 팩토리
- 프로토 타입
- 싱글톤(중요) : 클래스의 인스턴스가 1개여야만 하는 패턴
- 구조 패턴
- 어댑터
- 브릿지
- 컴포지트
- 데코레이터
- 퍼사드
- 플라이웨이트
- 프록시
- 행동 패턴
- 책임 연쇄 (Chain of Responsibility)
- 커맨드 (Command)
- 인터프리터 (Interpreter)
- 이터레이터 (Iterator)
- 미디에이터 (Mediator)
- 메멘토 (Memeento)
- 옵저버 (Observer)
- 스테이트 (State)
- 전략 (Strategy)
- 템플릿 메서드 (Template Method)
- 비지터 (Visitor)
일일히 다 정의할수는 없고 있다는 것만 보자.. ㄷㄷ
람다와 스트림(중요)
람다 표현식이란 ? 메소드를 하나의 식으로 표현한 것
람다식을 사용하면 클래스 작성 , 객체 생성을 하지 않아도 메소드를 사용할 수 있다.
→ 를 사용해서 사용한다.
(매개변수목록) → { 함수몸체 }
람다 표현식 사용법
- 매개변수의 타입을 추론할 수 있을 경우는 타입 생략가능
- 매개변수가 하나인 경우는 괄호 () 를 생략 가능
- 함수의 몸체가 하나의 명령문만으로 이루어져있다면 중괄호 {} 생략가능 ( 뒤에 세미콜론 ; 도 붙이지 않아도 된다)
- 함수의 몸체가 하나의 return 문으로 되어있다면 중괄호는 생략불가
람다식은 메서드가 아니고 익명 클래스의 객체이다.
객체명 메서드명 없이 사용하는 함수인것이다.
스트림이란?
스트림이란 한번에 한개씩 만들어지는 연속적인 데이터 항목들의 모임이다.
입력 스트림을 통해 데이터를 하나씩 읽고 출력 스트림을 통해 한개씩 기록한다.
스트림의 특징
- 스트림은 데이터 소스를 변경하지 않는다. 소스로 부터 읽어오기만 할뿐 소스는 변경되지 않는다.
- 스트림은 일회용이다.
- 스트림은 한번 사용하면 재사용이 안됨 ! (그러니까 한 파일 안에서 stream1 이라는 스트림을 사용했다면 거기서는 다른 곳에서 stream1 을 사용해서 뭘 할수 없다는 얘기이다.
- 불변성을 가진다.
- 데이터를 흐르게 하여 처리하는 동작방식이기 때문에 한번 흐름이 끝나면 더이상 흐름을 유지하지 않는다.
- 결국 새로운 스트림을 생성해주어야 한다.
interface Calculator {
int calculate(int num1 , int num2); //계산 메서드
}
//------------------아래 main 메서드
//뺄셈
Calculator sub = (a,b)->
a - b; //이런식으로 한줄이라면 괄호없이도 가능
;
호출
int sb = sub.calculate(1, 2);
System.out.println(sb);
여기서 sub 는 메소드명이 아니고 인터페이스 Calculator 를 구현하는 참조변수이다.
메서드명은 calculate 임.
//덧셈 Calculator add = (a,b)->{ //a , b 는 매개변수임 return a + b; }; //이걸 풀어서 해보자면 // public int add(a,b) { // return a + b; //뭐 이런느낌으로다가 // }
int ad = add.calculate(5, 10); System.out.println(ad); System.out.println(add.calculate(10, 20)); //바로 출력에서 호출도 가능
※ array 와 arrayList 차이점 ?
가장 큰 차이점은 길이를 조정할 수 있는가 없는가
Stream 에서 map 함수가 뭐고 ?
데이터를 변형하는데 사용한다.
데이터에 해당 함수가 적용된 결과물을 제공하는 Stream 을 리턴한다.
'map은 Stream의 요소들을 내가 사용할 형태로 바꾸거나, 사용할 요소를 뽑아내는 것'라고 생각했습니다.
List<Person> list7 = names.stream()
// .map(Person::new) //person 객체를 만듬
.map(el->{
return new Person(el,ages.get(names.indexOf(el))); //names 의 인덱스를 가져온후 ages 에 해당하는 값을 리턴
}).collect(Collectors.toList()
);
//el 이라는 매개변수를 가진 map 메소드를 사용하는데 리턴을 어케 받냐
//el , ages.get(names.indexOf(el)) , 즉 names 의
names.stream()은 names 리스트에서 각 요소를 하나씩 처리할 수 있도록 스트림을 생성합니다.
apply 함수 : 인자를 입력받고 인자에 대한 작업을 수행한 후에 결과를 리턴한다
어노테이션 : 약속
스트림에서 자주 사용하는 함수
- .filter()
- .map()
- .reduce()
- .boxed()
- .sorted()
- .collect()
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 10월 10일 (3) | 2024.10.10 |
---|---|
24년 10월 7일 (0) | 2024.10.09 |
24년 10월 2일 (0) | 2024.10.08 |
24년 10월 1일 (6) | 2024.10.07 |
24년 09월 30일 (1) | 2024.10.03 |