Stream의 특징 1. 단일 방향이다 2. FIFO [ read() 메소드 ] 인자가 없으면 1byte씩만 읽어 온다. -> 그렇기 때문에 2byte인 한글을 입력하면 두 번에 걸쳐 읽어온다. 인자에 byte형 배열을 써넣으면, 한 번에 최대 배열의 크기만큼 바이트를 읽어들인다. System.in.read() 메소드에서 입력 시 엔터키를 누르면 \r, \n 두 이스케이프 문자가 입력 된다!! 다양한 타입의 값을 읽어올 수 있도록 하기 위해 추상 메소드이다. ex) package StreamEx; import java.io.*; public class InputStreamEx { public static void main(String[] args) { byte input[] = new byte[5]; i..
[Map] key : 중복 X, value : 중복 O 값을 추가할 때 put() 메소드 사용 (Map 계열에서만 사용 가능) 값을 가져올 때 get() 메소드 사용 -> get의 매개변수에 key를 쓰면 key에 대응되는 value 값을 가져옴 ex) HashMap tel = new HashMap(); // 값 저장 tel.put("서울", "02"); tel.put("경기", "031"); // 저장된 값 가져옴 System.out.println(tel.get("서울")); System.out.println(tel.get("경기")); 실행 결과> 02 031 Map에 값을 추가하면 Entry 객체가 생성된다. Entry 클래스에는 각각 Key와 Value의 값을 얻을 수 있는 getKey(), ge..
Collections Framework : 값을 담을 수 있는 컨테이너(그릇) List: 값을 순서대로 저장, 중복 가능 Set : 값을 순서 상관 없이 저장, 중복 X [ArrayList] 1. java.util.ArrayList를 import ※ 자동으로 import : ctrl+shift+o 2. 값 추가 시 add() 메소드 사용 이 때, 값은 기본적으로 Object 타입으로 저장되기 때문에 모든 타입의 값을 저장 가능 특정 타입으로 값을 저장하려면 Generic 활용! ex) al.add("체리"); 3. 값을 꺼낼 땐 get() 메소드 사용 (Iterator도 사용 가능) ex) al.get(0); // 0번째 값 꺼냄 4. ArrayList의 크기를 알려면 size() 메소드 사용 ex) a..
Generic의 안에는 여러 개의 타입을 써넣을 수 있지만, 그 타입은 반드시 참조형이어야 한다! (기본형 불가) ex) class Person { T name; E age; Person(T name, E age) { this.name = name; this.age = age; } } public class GenericEx { public static void main(String[] args) { Person p1 = new Person("체봄", 22);// 오류 발생!! System.out.println("name: "+p1.name+", age: "+p1.age); } } 위와 같이 코드를 작성하면 오류가 발생한다. 그 이유는 Generic의 안에는 참조형만 쓸 수 있는데 기본형인 int 를 썼..
[enum 클래스] : 연관된 상수들을 열거한 클래스 사용법: enum 클래스명 { 변수명1, 변수명2, …; } 1. 생성자를 가질 수 있고 생성자의 접근 제어자는 private형만 가능하다. 2. 자동으로 생성자가 생성되지만, private형이므로 생성자를 통해 객체를 생성할 수 없다. 3. values 메소드를 호출하여 선언된 모든 상수를 반환할 수 있다. ex) enum Color { red, yellow, green, blue; Color() {// private형 생성자 System.out.println("생성자 호출"); } } enum 클래스를 이용해 간단하게 나타낸 코드를 풀어보면 다음과 같다. class Color { public static final Color red = new Co..
[Wrapper 클래스] : 기본형을 클래스로 정의한 것으로, 기본형을 객체로 다루기 위해 사용. Wrapper 클래스의 equals 메소드는 오버라이딩 되어 있으므로 내용을 비교한다. autoBoxing : new를 사용하지 않고도 Wrapper 클래스 객체화하는 것 ex) Integer intg = 100; // Integer intg = new Integer(100); unautoBoxing : Wrapper 클래스 객체를 자동으로 기본형으로 바꾸는 것 ex) int i = intg + 10; /* int temp = intg.intValue(); int i = temp + 10; */ ※ autoBoxing 기능은 처리 속도가 느리기 때문에 정석대로 작성하는 걸 추천!
[Object 클래스의 기본 메소드] 1. toString() : 해당 클래스의 객체를 문자열로 반환 객체명을 출력하거나, 객체에 문자열을 더하여 출력하면 해당 객체의 toString 메소드가 자동으로 호출된다. toString 메소드를 작성하지 않은 경우에는 (패키지명).(클래스명)@(객체의주소) 가 출력되고, 작성한 경우에는 toString 메소드의 해당 내용이 출력된다. ex) package ObjectExs; public class ObjectEx1 { public static void main(String[] args) { ObjectEx1 obj = new ObjectEx1(); obj.toStringFunc(obj); } public void toStringFunc(ObjectEx1 obj)..
※ 예외 클래스 상속도 1. 직접 처리 : try ~ catch -> 더 효율적! 2. 선언 처리 : throws [try ~ catch] 사용법 : try { 예외 발생 예상 코드 } catch(해당예외클래스 e) { 예외 처리 코드 } => 구체적인 예외 처리가 가능! try문 내에서 예외 발생 시 아래에 있는 코드는 실행하지 않고 try문을 빠져나옴 그러므로 예외가 발생하더라도 실행해야하는 코드가 있다면 finally문 사용!!! catch문을 여러 개 사용할 때 해당예외클래스가 상위일수록 아래에 배치해야 한다! [finally] 예외가 발생하더라도 꼭 실행해야 하는 코드는 finally문을 사용하여 작성한다! (-> try ~ catch 문은 예외가 발생하면 그 이후의 코드는 실행되지 않기 때문)..