이론 정리/java 60

람다 표현식

람다 표현식 람다 표현식이란? 메서드로 전달할 수 있는 익명 함수를 단순화한 것 람다 표현식은 일단 간결하게 코드를 전달하는데에 쓰인다. -> 말하자면 사실 이전에 못하던 기능을 람다를 통해 할 수 있다기 보다는, 그냥 코드가 깔끔해지고 알아보기 쉬운 것이다. 저기 위의 설명에서 그 이유를 대충 짐작할 수 있는데 익명 이름이 따로 없다. 이름을 만들 필요가 없으니 구현이 간단해진다. 함수 메서드와 다르게 특정 클래스에 종속되지 않는다. 파라미터 리스트, 바디, 반환 형식, 예외 리스트는 포함된다. 전달 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성 익명 클래스처럼 코드를 막 구현할 필요는 없다. 람다에 대해서 (Apple a1, Apple a2) -> a1.getWeight()...

이론 정리/java 2023.08.05

동적 파라미터화

동적 파라미터화 여러 요구사항에 효과적으로 대응 가능한 방법. 아직은 어떤 식으로 동작할지가 결정되지 않은 코드 블록이고, 나중에 프로그램에서 실행된다. 문제 상황 1. 녹색 사과 필터링 enum Color { RED, GREEN }빨강, 초록 사과가 있다. 여기서 만약에 녹색 사과를 필터링하려 하면 if(GREEN.equals(apple.getColor())) { result.add(apple); }요렇게 쓸 것이다. 단점 만약 빨간사과, 노란사과, 검은사과 등등... 필터링 개수가 많아진다면? 저 if문이 계속해서 늘어나거나 또 빼짐에 따라 줄어들 수 있을 것이다. 2. 색의 파라미터화 위의 1에서의 단점을 해결하기 위함이다. public static List filterApples(List inve..

이론 정리/java 2023.07.12

this

this 생성자 this() 생성자에서 다른 생성자를 호출할 때 사용 다른 생성자 호출시 첫 줄에서만 사용가능 예시 class Car2 { String color; String gearType; int door; Car2() { this("white", "auto", 4); } Car2(String color) { this("color", "auto", 4); } Car2(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } }요런 식으로 생성자에서 같은 클래스 안의 생성자를 호출할 때 사용한다. -> 사실 이거는 걍 Car2("color", "auto, 4"); ..

이론 정리/java 2023.04.18

static이랑 instance

static과 인스턴스 메서드 일단 얘들이 뭐냐면 class MyMath { long a, b; long add() { // 인스턴스 메서드 return a + b; } static long add(long a, long b) { // 클래스 메서드(static) return a + b; } }이렇게 되어있다. 그래서 이게 뭐가 다른걸까? 인스턴스 메서드 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출 인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드 iv : instance variable im : instance method 메서드 내에서 인스턴스 변수(iv) 사용가능 static 메서드(클래스메서드) 객체생성 없이 '클래스이름.메서드이름()'으로 호출 객체..

이론 정리/java 2023.04.18

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