이론 정리/java 60

빌더 패턴

빌더 패턴 어떤 인스턴스를 만들 때 다양한 구성으로 만들어 질 수 있는데, 인스턴스를 동일한 프로세스를 통해 만들 수 있게끔 해주는 것이다. 문제 상황 public class TourPlan { private String title; private int nights; private int days; private LocalDate startDate; private String whereToStay; private List plans; public TourPlan() { } public TourPlan(String title, int nights, int days, LocalDate startDate, String whereToStay, List plans) { this.title = title; thi..

이론 정리/java 2023.01.25

final

final 이거 은근 많이 쓰이는데 생각보다 아무생각 없이 쓰게된다. 일단 final은 클래스, 메소드, 멤버변수, 지역변수에 사용될 수 있는데 이걸 쓰면 class 변경, 확장될 수 없는 클래스가 된다. 다른 클래스의 조상이 될 수 없다! method 변경될 수 없는 메소드가 된다. 오버라이딩을 통한 재정의가 불가능하다. 멤버/지역변수 값을 변경할 수 없는 상수가 된다. 단 한번의 초기화만 가능하다!! public final class Test { // 조상이 될 수 없는 클래스 final int max_size = 100; // 값을 변경할 수 없는 멤버 변수 (상수) final void getMaxSize() { // 오버라이딩 할 수 없는 메소드 final int localValue = max_s..

이론 정리/java 2023.01.24

직렬화(Serializable)

직렬화(Serializable) public interface Serializable{ } 직렬화용 Serializable 인터페이스 내부를 보면 메소드가 하나도 구현이 안되어있다. 그럼 얘가 뭔 용도가 있을까?? 생성한 객체를 파일로 저장할 때 저장한 객체를 읽을 때 다른 서버에서 저장한 객체를 받아서 사용할 때 이런 식으로, 생성한 클래스를 파일에 읽거나 쓸 수 있도록 하거나 혹은 다른 서버로 보내거나 받을 수 있도록 하기 위해서는 Serializable 인터페이스를 반드시 필요로 한다. 즉 Seriablizable 인터페이스를 통해 JVM은 특정 객체를 저장하고, 읽거나, 다른 서버와 주고받을 수 있게 된다. 이게 뭐길래?? 직렬화 java내부의 객체나 데이터를 외부의 자바 시스템에서 사용할 수 있..

이론 정리/java 2023.01.24

java 초기화

Initialization 변수의 초기화 변수를 처음 선언하고 초기화 하는 것이다. 선언하자마자 자신이 사용하고 싶은 값으로 초기화 해주는것이 좋다. 명시적 초기화(explicit initialization) 변수를 선언함과 동시에 초기화 말 그대로 변수를 선언함과 동시에 초기화한다. 초기화 블럭(initialization block) 명시적 초기화에 비해 복잡한 초기화 작업이 필요할 때에 사용한다. 두 가지 종류가 있는데 클래스 초기화블럭 클래스변수의 초기화에 사용 클래스가 메모리에 처음 로딩될 떄에 한 번 수행 인스턴스 초기화블럭 인스턴스 초기화에 사용 생성자와 같이 인스턴스를 생성할 때 마다 수행 인스턴스 초기화 블럭이 생성자 초기화 블럭보다 먼저 수행된다. 그래서 초기화 블럭이 뭔데? public..

이론 정리/java 2023.01.22

Optional이란??

Optional이란?? Spring Data JPA를 이용해서 개발을 할 때에, find메서드를 사용하면 Optional이 기본적으로 나올 것이다. Optional이 일단 무엇일까?? T타입의 객체를 감싸는 generic 형태의 Wrapper클래스 Optional은 모든 타입의 참조 변수를 담을 수 있다. public final class Optional { private final T value; // T타입의 참조변수 }이런 식으로, 참조 변수들을 그냥 반환하는 것이 아니라, Optional로 한번 감싸서 보내주는 것이다. 이걸 왜 해줄까?? 만약 바로 객체를 보내준다 가정하면 없는 객체를 가져와서 확인하려 하면? 객체 가져옴 객체가 없음 사용하려 한다 에러!! 이렇게 된다. 따라서 보통 객체를 바로..

이론 정리/java 2023.01.19

Stream의 연산

스트림의 연산 스트림은 중간 연산과 최종 연산을 제공한다. 중간연산 연산결과가 Stream 여러 번 적용 가능 최종연산 연산결과가 Stream이 아니다. 단 한번만 적용 가능(Stream요소를 소모함) 중간 연산 스트림 자르기 - skip(), limit() Stream skip(long n) // 앞에서부터 n개 건너뛰기 -> n+1 ~ 끝까지 Stream limit(long maxSize) // maxSize이후는 잘라냄 -> 0 ~ maxSize까지예를 들어 IntStream intStream = IntStream.rangeClosed(1, 10); // 1 2 3 4 5 6 7 8 9 10 intStream.skip(3).limit(5).forEach(System.out::print); // 4 ..

이론 정리/java 2023.01.14

Stream 만들기

Stream 만들기 collection을 Stream으로 만들기 Collection 인터페이스의 stream()으로 컬렉션을 스트림으로 변환 Stream stream() // Collection인터페이스의 메서드 List, Set을 변환할때 이를 사용한다. 예를 들어 List list = Arrays.asList(1,2,3,4,5); Stream intStream = list.stream(); // list를 스트림으로 변환 // 스트림의 모든 요소를 출력 intStream.forEach(System.out::print); //12345요런 식으로, List를 stream()메소드를 사용하여 Stream으로 바꿀 수 있다. 그리고 메서드 참조를 사용하여 stream의 내용을 다 출력시키면 된다. 참고로 ..

이론 정리/java 2023.01.13

java 오버로딩(overloading)과 오버라이딩(overriding)

오버로딩, 오버라이딩 오버로딩(Overloading) 메소드 이름이 같지만, 매개변수에 따라 다른 것으로 판단 한번 예를 들어보겠다. 오버로딩 사용 먼저 다음과 같이 메서드를 정의해 준다. class OverloadingMethods { public void ryoochan(Integer iq){ System.out.println("류찬의 아이큐는 " + iq + " 입니다."); } public void ryoochan(String look){ System.out.println("류찬의 외모는 " + look + " 입니다."); } }보다시피 ryoochan은 같은 이름을 가진 메서드인데, 매개변수가 Integer, String으로 각각 다르게 설정되어 있다. public void 오버로딩테스트() ..

이론 정리/java 2023.01.13

Stream(스트림)

Stream(스트림) 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것 여기서 데이터 소스란, 컬렉션이나 배열처럼 여러가지 데이터들을 저장하고 있는 것을 의미한다. 그동안은 표준화된 방법을 위해 Collection Framework(List, Set, Map)을 사용해 왔는데 이 Collection Framework의 List, Set, Map은 서로의 사용법이 달랐었다. -> 즉, 사실 제대로된 표준화가 아니었다. JDK1.8부터는 stream을 통해 진짜 저 Collection Framework를 제대로 통일시킬 수 있었다. Stream 장점 컬렉션(List, Set, Map)과 배열을 Stream에 태운다. Stream의 사용 방식대로 쓰면 다른 데이터소스인데도 같은 메서드를 사용해서 같은 결..

이론 정리/java 2023.01.12

java에서 병렬성

java에서 병렬성 일단 이 병렬처리는, 엄청나게 많은 데이터를 처리할 때에 하나로 다 하는것보다 나눠서 처리시켜서 작업 처리 시간을 줄이는 것에 목적이 있다. 참고로 이거 데이터 나누고 / 병렬 쓰레드 만들고 / 다시 합치고 등등...에서 시간을 잡아먹어서 안하느니만 못한 경우도 있다. 그래서 요소가 많을때 주로 한다고 한다. 동시성, 병렬성 일단 동시성이랑 병렬성이 뭔지 좀 알고 넘어가자. 동시성 하나의 코어에서 여러 쓰레드가 작업 동시에 진행되는것이라기 보다는 그냥 빠르게 돌아가면서 실행하는것 병렬성 여러 코어에서 작업을 진행 실제로 여러개의 작업이 병렬적으로 실행되는것 이런 느낌이다. 포크조인 프레임워크 자바 병렬 스트림은 요소들을 병렬 처리하기 위해 포크조인 프레임워크(JVM내부에 있는 프레임워..

이론 정리/java 2023.01.12