Java/Java의 정석

    [Java의 정석] 14. 람다와 스트림

    [Java의 정석] 14. 람다와 스트림

    1. 람다식 1) 람다식이란? 메서드의 이름과 반환값 없이, 하나의 식처럼 표현한 것으로 '익명 함수'라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int) (Math.random()*5 + 1)); // 람다식 더보기 /* int max(int a, int b) { return a > b ? a : b; } */ (int a, int b) -> a > b ? a : b (a, b) -> a > b ? a : b // 타입 추론이 가능한 경우는 타입 힌트를 생략 가능 더보기 a -> a*a // 매개변수가 하나인 경우는 괄호 생략 가능 (int a) -> a*a // 매개변수 타입이 있으면 괄호 생략 불가능 더보기 /* (String name, ..

    [Java의 정석] 12. 제네릭스, 열거형, 어노테이션

    1. Generics 1.1 제네릭스란? : 컴파일 시에 타입을 확인하는 기능. => 타입 안정성을 높이고 형변환의 번거로움을 줄인다. 1.2 제네릭 클래스의 선언 class Box { T item; void setItem(T item) { this.item = item; } T getItem() { return this.item; } } Box b = new Box(); b.setItem(new Object()); // error b.setItem("abc"); // ok // 이전 코드 호환을 위해 아래도 가능 Box b = new Box(); b.setItem(new Object()); // ok, but warning b.setItem("abc"); // ok, but warning Box : 제..

    [Java의 정석] 11. Collections Framework

    [Java의 정석] 11. Collections Framework

    1.5 Iterator, ListIterator, Enumerator : JCF 에서는 저장된 요소를 읽어오는 방법을 표준화하였다. Iterator 인터페이스에 정의되었고, Collection 인터페이스에 Iterator 를 반환하는 iteratore() 를 정의하고 있다 List list = new ArrayList(); // 다른 컬렉션으로 변경할 때는 이 부분만 고치면 된다. Iterator it = list.iterator(); while(it.hasNext()) { // do sth.. } Map 인터페이스에는 iterator 를 반환하도록 되어있지 않기 때문에, key 나 entry 집합으로 반환한 후에 iterator 호출이 가능하다. Iterator keyIt = map.keySet().i..

    [Java의 정석] 09. java.lang 패키지

    모르는 것만 짧고 빠르게 정리한 노트입니다. 1.1 Object 클래스 hashCode() : 객체의 주소값을 이용해서 해시코드를 만들어 반환한다. str 클래스는 문자열 내용이 같으면 도일한 해시코드를 반환하도록 오버라이딩되어 있다 toString() : 클래스이름 + @해시코드 값이 기본으로 설정되어있다. clone() : 객체의 값을 복사한다.. 참조타입의 경우에는 주소값을 복사하므로, 얕은복사문제가 있다. Cloneable 인터페이스를 상속받아 오버라이딩해야한다. 1.2 String 클래스 생성자를 이용한 경우에는 항상 새로운 String 인스턴스가 생성된다. 리터럴은 클래스가 메모리에 로드될 때 미리 생성되어있다. 따라서 같은 리터럴로 초기화되는 변수들은 모두 같은 주소의 문자열 리터럴을 갖는다..

    [Java의 정석] 08. 예외 처리

    [Java의 정석] 08. 예외 처리

    모르는 것만 짧고 빠르게 정리한 노트입니다. 1.1 프로그램 오류 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 1.2 예외 클래스 : Exception 은 checked Exception 과 unchecked Exception 으로 나뉜다. unchecked Exception 은 보통 프로그래머의 실수에 의해 발생하고, checked Exception 은 어플리케이션 외적인 요인으로 발생한다. 1.3 메서드에 예외 선언하기 main 에서도 예외가 처리되지 않으면, 프로그램이 종료된다. 1.9 자동 자원 반환 try with resources 문 try (FileInputStream fis =..

    [Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언

    책에서는 예외 부분을 굉장히 간단하게 설명이 되어있는 것 같아, 더 구체적인 자료를 찾아봄 "예외는 조상 클래스이 메서드보다 많이 선언할 수 없다." 라고 적혀있지만, 엄밀히 말하면 checked Exception 에만 해당하는 내용이다. unchecked Exception 에 대해서는 자식 클래스에서 추가로 선언해도 상관없다. (case 1) 부모 메서드가 checked exception 던질 때, class Parent{ void method1() throws SQLException { //checked exception } } class Child extends Parent{ void method1() { } } (case 2) 부모 메서드가 unchecked exception 던질 때, class..

    [Java의 정석] 07. 클래스 상속 & 인터페이스 상속

    [Java의 정석] 07. 클래스 상속 & 인터페이스 상속

    모르는 것만 짧고 빠르게 정리한 노트입니다. 2.2 오버라이딩의 조건 조상 클래스이 메서드를 자손 클래스에서 오버라이딩 할 때, 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다. 예외는 조상 클래스이 메서드보다 많이 선언할 수 없다. 인스턴스메서드를 static 메서드로 또는 그 반대로 변경할 수 없다. 책에서는 예외 부분을 굉장히 간단하게 설명하는 것 같아, 따로 더 정리했다. [Java의 정석] 7.2 메소드 오버라이딩 시 예외 선언 책에서는 예외 부분을 굉장히 간단하게 설명이 되어있는 것 같아, 더 구체적인 자료를 찾아봄 "예외는 조상 클래스이 메서드보다 많이 선언할 수 없다." 라고 적혀있지만, 엄밀히 말하면 checked letsmakemyselfprogrammer.tisto..

    [Java의 정석] 06. 객체지향 프로그래밍

    모르는 것만 짧고 빠르게 정리한 노트입니다. 4.5 가변인자(varargs)와 오버로딩 기존에는 메서드의 매개변수 개수가 고정적이었으나, JDK1.5 부터 동적으로 지정해 줄 수 있게 되었다. '타입... 변수명' 과 같은 형식응로 선언. 매개변수 중에서 가장 마지막에 선언해야 한다. (컴파일러의 매개변수 매핑 로직인듯하다.) 인자가 아예 할당되지 않을 수도 있고, 배열이 포함될 수도 있다. public PrintStream(String format, Object... args); 여러개의 문자열을 타입으로 받는 메서드를 생각해보자. 아래와 같이 두가지 버전으로 작성할 수 있다. //1st String concatenate(String... str) {...} //2nd String concatenate..