이론 정리/java 56

Default, Static method in java(feat. JDK8, 그 이후)

Default, Static method in java(feat. JDK8, 그 이후) 인터페이스를 공부하다 보면 자주 나오는 메서드들이다. 어떤 것인지, 어떻게 쓰이는지 차이를 알아보자. java interface 먼저 인터페이스에 관한 기본적인 설명은 얘랑 얘를 보면 대충 감이 잡힐 것이라 생각한다. 기존에는 interface를 만들고, 이를 구현하는 부분을 따로 implements하여 작성해 주어야 했다. JDK 8에서의 변화 JDK8부터 interface에서 default, static 메서드의 사용이 가능해졌다. default method Default가 뭔데? 싶을 수 있을 것이다. 사실 이름 그대로 기본적으로 기능을 갖고 있는 메서드를 뜻한다. 예를 들어, 류찬의 외모 설명 이라는 메서드를 ..

이론 정리/java 2023.04.04

TreeSet!!

TreeSet!! public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, java.io.Serializable {}TreeSet의 구조를 살펴보면 다음과 같다. 이는 AbstractSet, NavigableSet인터페이스를 구현하여 사용하고 있다. TreeSet은 이름처럼 Tree와 같은 구조를 가지고 원소들을 저장한다. 특징을 나열하자면 중복 불가 원소의 순서 보존되지 않음 집어넣은대로 들어가는게 아니라 알아서 트리 구조로 정렬시킨다. 요소를 오름차순으로 정렬한다. Thread-safe하지 않다. Red-Black-Tree TreeSet은 내부적으로 Red-Black-Tree를 사용하고 있다. 이게 뭘까...? Red-B..

이론 정리/java 2023.02.13

java에서 정적 멤버를 접근하는 방법??(feat.클래스이름)

정적 멤버를 접근하는 방법?? java에서 정적 맴버를 접근할 때에는 public class Ryoochan { static int iq; public static void main(String[] args) { System.out.println(Ryoochan.iq); // 이런 식으로 } }요렇게, 클래스이름.멤버이름으로 접근한다. 왜지...? 일관된 방법 이게 사실 정적멤버에 접근하는 방식은 3개가 있다. 정적멤버 사용 같은 패키지 상속한 경우 사용 가능 상속하지 않은 경우 사용 불가 this.정적멤버 사용 같은 패키지 상속한 경우 사용 가능 상속하지 않은 경우 사용 불가 다른 패키지 상속한 경우 사용 가능 상속하지 않은 경우 사용 불가 클래스이름.정적멤버 사용 같은 패키지 상속한 경우 사용 가능 ..

이론 정리/java 2023.01.30

Reflection??

https://www.youtube.com/watch?v=67YdHbPZJn4 를 보고 정리한 글입니다. Reflection?? 구체적인 클래스 타입을 알지 못해도 그 클래스의 메서드와 타입, 변수들에 접근할 수 있도록 해주는 java API 이는 클래스로더를 통해 읽어온 클래스 정보를 사용하는 기술이다. 이를 사용하여 클래스를 읽어오거나, 인스턴스를 만들거나, 메서드를 실행하거나, 필드의 값을 가져오거나 변경하는 등의 행위가 가능하다. 사용법 특정 annotation이 붙어있는 필드 또는 메서드 읽어오기(JUnit, Spring) 특정 이름 패턴에 해당하는 메서드 목록 가져와 호출하기(Getter, Setter) Reflection 먼저 Spring은 어떻게 실행시점에 bean을 주입할 수 있을까? 또..

이론 정리/java 2023.01.26

프로토타입 패턴

프로토파입 패턴 기존 인스턴스를 복제하여 새로운 인스턴스를 만드는 방법 복제 기능을 갖추고 있는 기존 인스턴스를 프로토타입으로 사용해 새 인스턴스를 만들 수 있다. 시간이 오래 걸리는 작업(예를 들어 DB에서 데이터를 읽어와서 이걸 토대로 인스턴스를 만들어야 하는 경우, http를 통해 얻은 데이터를 통해 인스턴스를 만드는 경우 등..) 을 할 때에 매번 이를 만드는 것은 리소스와 시간 낭비가 크다. 그렇기 때문에 이렇게 만들어 둔 데이터를 복제해서 새로운 인스턴스를 만들고, 이곳에서 얻어온 정보를 토대로 변경 작업 등을 해주면 더 효율적이게 될 것이다. issue 상황 public class GithubIssue { private int id; private String title; private Gi..

이론 정리/java 2023.01.25

빌더 패턴

빌더 패턴 어떤 인스턴스를 만들 때 다양한 구성으로 만들어 질 수 있는데, 인스턴스를 동일한 프로세스를 통해 만들 수 있게끔 해주는 것이다. 문제 상황 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