람다 표현식이름이 없는 함수를 간결하게 정의Arrays.sort(list, new StringLengthComparator());Arrays.sort(list, (s1, s2) -> s1.length() - s2.length());-> 화살표연산자() 안에 매개변수(없으면 빈괄호)() 는 매개변수 1개면 생략가능매개변수 타입 생략시 var 적용일부만 var 적용불가능표현식여러문장이면 {} 작성람다 표현식은 그 표현식이 등장하는 블록 가시영역에 포함됨캡처라고함캡처된변수는 수정불가하지만 참조변수면 객체상태는 변경가능int num = 10; // 지역 변수// num이 final 이거나 실질적 final 변수일때만 캡처가능// 람다 표현식에서 num을 사용Runnable r = () -> System.out..
Language/JAVA
범용함수template의 사용interface필요범용 클래스유지하는 값의 타입을 제한없음모든 타입으로 유지범용 클래스 내의 T 타입 객체를 new 불가필요한 객체를 외부에서 생성하여 전달함배열은 Object 배열,template을이용하는 자료구조interface필요없음public class Box { private T value; public Box(T value) { this.value = value; }}범용 객체 생성List files = new ArrayList();List files = new ArrayList();//타입지정생략var files = new ArrayList();T files = new V();범용메소드타입 매개변수를 가지는 메소드다양한 타입을 처리할..
Object 클래스상속받지않으면 자동으로 Object 클래스 상속(모든 클래스의 부모)toString 메소드System.out을 이용한 출력 디버깅재정의안해도 호출은가능하지만 유용하지않음 @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; }equals 메소드두객체 내부 상태 비교할때 사용Object클래스 의 equals는 주소검사(같은 객체를 가리키는지검사) @Overridepublic boolean equals(Object obj) { if (this == obj) return true; // 자기 자신과 비교 if (obj == null || getClass() !..
쓰레드CPU를 통해 실행하는 최소 단위Runnable interface 구현하여 정의main이 끝나도 쓰레드가 아직 수행 중이면 프로그램은 종료하지 않음타이머java.util.Timer정해진 시간 간격마다 사건을 발생record데이터 클래스를 간단하게 정의상속받을수없고 final 클래스임getter, toString(), equals(), hashCode() 자동생성record 객체는 불변객체임멤버 변수 중 참조 타입의 불변 객체가 아닌 객체가 있으면주의(getter로 접근뒤에 내부 수정할수있음)public record Position(int a, int b) { //a,b는 private 필드고 getter,setter로 접근해야함 // 추가적인 메서드를 작성 가능}새로 추가된 생성자는 반드..
내부 클래스소스 파일 줄이기공개할 필요없는것 숨기기클래스 내부 클래스의 종류와 상관없이 외부 클래스 객체는 내부 클래스 객체의멤버를 접근 권한 수식어 상관없이 접근할 수 있음클래스 내부 클래스를 정의할 때 보통 private로 함 (다른 클래스에서 사용못하게)일반 내부 클래스는 static 멤버를 가질수없음(중첩클래스는 가능)private로 정의해도 outter 클래스는 접근가능public class OuterClass { private String message = "Hello from OuterClass"; // private 내부 클래스 private class InnerClass { public void displayMessage() { System..
인터페이스범용정렬Object 클래스를 이용하여 정렬Interface를 통해 비교기능있는 객체만 받을수있게함public static void sort(Object[] array) {//특정한 행위를 할 수 있는 객체만 받을 수 있어야 함//비교할 때 사용할 함수가 필요함}public static void sort(Runnable[] array) {//compareTo 메소드를 정의한 Runnable만 받음}Template 활용가능public static T max(T a, T b) { return a.compareTo(b) >= 0? a: b;}//T가 Comparable을 구체화한 타입임을 보장해줌public static > T max(T a, T b) { return a.compareTo(..
열거형클래스 내부에 정의하면 자동 static 내부 클래스가 됨정수상수로 활용불가능함Enum 클래스를 상속받음switch문에서는 열거형 이름을 쓰지않음public enum DIR { LEFT , RIGHT }; //부모 Enum 클래스 임Enum 클래스Comparable 구현되있음compareTo 구현이 final로 되있어서 재정의 불가public enum DIR { LEFT , RIGHT };int leftOrdinal = DIR.LEFT.ordinal(); //0String leftName = DIR.LEFT.name(); //"LEFT"열거형에 맴버,메소드 추가생성자는 private로 만들어야함
문자열(String)연산으로 결합가능불변 객체임new를 보통 안사용함 (최적화문제)문자열풀을 이용함(해싱기반 맵 자료구조)new를 쓰면 새객체를 만들게됨(문자열풀을 사용안함)String f1 = "asda";String f2 = "asda";String f3 = new String("asda");//f1=f2이다(같은 문자열 풀임)//f1 != f3 이다.(f3는 문자열풀에 없는 새 객체임)String f4= f1+f2; //힙 영역에 새객체 생성String f5= f1+f3; //힙 영역에 새객체 생성문자열 변환String s = "" + 10;String s2 = Integer.valueOf(10).toString();int n1 = Integer.parseInt(s);//int 반환int n2 = ..