java(15)
-
우테코 3주차 소감문
보호되어 있는 글입니다.
2023.11.08 -
디자인 패턴(생성 패턴)
디자인 패턴이란? 객체 지향 프로그래밍 설계과정에서 자주 발생하는 문제들을 피하기 위한 패턴이다. 생성 패턴 1. 팩토리 단일 책임 원칙을 지키기 위해 필요하다. map 과 unit 클래스가 있을 때 map에 unit에 대한 책임이 있으면 안된다. map class는 맵 파일로 맵을 구성하고 맵에 있는 unit들을 분류해서 적절하게 배치해야한다고 하자. unit에 대한 책임이 없다는 건 unit이 추가되거나 할때 map class를 수정할 필요가 없는걸 뜻한다. 하지만 map을 정의하기 위해 unit과 관련된 내용이 포함 될 수 밖에 없다.(unit들을 분류해서 적절하게 배치) 이때 다른 추가 class를 만들어서 책임을 다른 클래스로 돌린다.(UnitFactory class) 그렇다면 Map은 맵 구성..
2023.11.07 -
객체 지향 5원칙 SOLID
1. 단일 책임 원칙(SRP) 하나의 모듈이 하나의 책임을 가진다. -> 오직 하나의 기능을 맡아야한다. 업무를 효율적으로 분리할 수 있다. -> DB 패스워드 암호화 방식을 변경해야합니다. -> DB Entity 를 정의해야합니다. 예시 게임을 만든다고 가정.(Map과 Unit 으로 구성) 이 때 Map class에 Unit을 분류하는 기능이 있다면? 단일 책임 원칙에 위배된다. 왜 문제인가? 새로운 Unit이 생겼을때 Unit class를 건드려야하는데 Unit이 아니라 Map을 건드려야한다. 2. 개방 폐쇄 원칙(OCP) 확장에 대해선 열여있고 수정에 대해선 닫혀있다. 1. 확장에 대해 열려있다. : 요구 사항에 대해 기능을 추가할 수 있다. 2. 수정에 대해 닫혀있다. : 수정하지 않은채로 기능을..
2023.11.07 -
stream 문법
위의 그림은 stream을 관통하는 그림이라고 생각한다. 정의하는 방법 ArrayList list = new ArrayList(); Stream stream = list.stream(); String[] arr = new String[]{"1", "2", "3", "4"}; Stream stream1 = Arrays.stream(arr); 이외에도 여러 방법이 있지만 대표적인 방법은 위의 2가지이다. 여기서 알아야할건 Stream 와 Arrays.stream은 아예 다르다는 것이다. Arrays.stream의 기능을 확인하기 위해서 아래의 추상 클래스를 확인해야한다. abstract class ReferencePipeline extends AbstractPipeline implements Stream 또..
2023.11.05 -
함수형 프로그래밍 , 람다식
기존 익명 함수는 너무 번거로우니 함수형 인터페이스를 정의하고 해당 인터페이스를 계승하는 람다식들은 인터페이스에서 정의한 매개변수와 반환형을 사용한다고 생각하자!! 함수형 인터페이스는 추상 메소드가 1개인 인터페이스이다. 2개이면 람다식에서 사용하는 변수의 매개변수와 반환 자료형이 무엇인지 특정하기가 매우 어렵기 때문이다. Supplier 매개변수가 없고 T 타입으로 반환한다. Consumer T 타입 매개변수를 받고 아무것도 반환하지 않는다. Function T 타입을 매개변수로 받아서 R타입을 반환한다. Predicate T 타입을 매개변수로 받아서 boolean을 반환한다. Runnable 매개변수도 없고 반환도 없다. BiConsumer T타입과 R타입을 매개변수로 받아서 boolean을 반환한다..
2023.11.05 -
자바 Arrays.asList
@SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 해당 코드를 보면 위와 같다. 반환형이 ArrayList인데 우리가 생각하는 java.util.ArrayList가 아니다. java.util.Arrays.ArrayList이다. 하지만 여러 코드를 살펴보면 초기화를 위해 아래와 같이 사용된다. ArrayList list = new ArrayList(Arrays.asList(1,2,3)); List list2 = new ArrayList(Arrays.asList(1,2,3)); check point 1. new 연산자를 왜 사용하는가? return으로 반환되는 ArrayL..
2023.11.05