1. 추상 클래스 & 추상 메서드
/* 주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. */ /* 선언부만 존재 */ abstract 리턴타입 메서드이름();
2. 인터페이스
추상 클래스의 일종. 추상 메서드와 상수만을 멤버로 가질 수 있으며, 추상클래스보다 추상화 정도가 높다.
인터페이스를 사용하는 이유, 장점
(1) 유연한 설계가 가능하고 유지보수를 용이하게 하여 개발시간을 단축시킬 수 있다.
(2) 표준화가 가능하다.
(3) 서로 상속관계이거나, 같은 상위클래스를 공유하는 등의 상호관계에 있지 않아도 하나의 인터페이스를 공통적으로 구현하도록 함으로써 클래스들 간의 관계를 맺어줄 수 있다.
(4) 클래스의 선언과 구현을 분리시길 수 있기 때문에, 실제 구현에 독립적인 프로그래밍이 가능하다.
interface 인터페이스이름 { public static final 타입 상수이름 = 값; public abstract 메서드이름(매개변수목록); }
인터페이스는 인터페이스로부터만 상속받을 수 있으며, 다중상속이 가능하다.
인터페이스의 구현(implements): 인터페이스 그 자체로는 인스턴스 생성이 불가능하기 때문에 상속을 통해 추상 메서드를 완성한다. 이 경우, 키워드로 implements를 사용하여 구분한다.
*cf. 구현하는 인터페이스에 정의된 추상메서드 중 일부만 구현하는 경우, abstract를 붙여서 추상클래스로 선언해야한다.
class 클래스이름 extends 상위클래스 implements 인터페이스{ //인터페이스에 정의된 모든 추상메서드를 구현해야 한다. }
*cf. java.lang패키지: 는 Java 프로그래밍에 가장 기본이 되는 클래스를 포함하고 있는 패키지. import문 없이 바로 사용 가능하다.
1. Object class: 모든 클래스의 최상위 클래스

2. String class: 문자열을 저장하고 이를 다루는데 필요한 메서드를 제공
3. Math class: 수학계산에 유용한 기본적인 메서드 및 상수(자연수 E, 원주율 PI)를 정의해 놓은 클래스

*4. Wrapper class: 기본형 값을 객체로 변환하여 작업을 수행할 수 있도록 8개의 기본 자료형을 클래스로 정의해 놓은 클래스.

1. 컬렉션 종류
(1) List: 순서가 있는 데이터의 집합. 터이터의 중복값을 허용하며 인덱스로 조회가 가능하다.
List<자료형> 참조변수 = new ArrayList<자료형>(); 참조변수.size(); //데이터의 개수 참조변수.add(값); //데이터 추가 참조변수.add(인덱스,값); //해당 인덱스에 데이터 추가 참조변수.get(인덱스); //데이터 읽어오기: 참조변수.remove(인덱스); //데이터 삭제:
(2) Set: 순서를 유지하지 않는 데이터의 집합. 중복값을 허용하지 않는다.
(3) Map: key와 value의 한 쌍으로 이루어진 데이터의 집합으로 대량의 자료를 조회할 때 유리한 구조. 데이터가 저장되는 순서는 없다. key(변수명, 중복X)로 조회가 가능하고, value는 중복을 허용한다.
맵.put(key, value) //데이터 추가 맵.get(key) //데이터 조회

2. 제네릭스(Generics)
class 클래스명<T> {}
(1) 프로그램 오류
발생시점에 따라
컴파일 에러: 컴파일 시에 발생하는 에러
런타임 에러: 프로그램 실행 시에 발생하는 에러
논리적 에러 : 프로그램 실행은 되지만, 의도와 다르게 동작하는 것
에러, 경고, 예외
Error: 컴파일이 안됨
Warning: 실행은 되지만 성능 저하 등의 문제가 발생할 가능성이 있는 코드
Exception: 컴파일과 실행은 되지만 프로그램이 비정상적으로 종료되는 경우
(2) 예외 처리를 하는 경우
(3) 예외처리
try ~ catch 구문
try { 예외가 발생할 가능성이 있는 코드 } catch(Exception e) { 예외가 발생했을 때의 코드 } finally { 예외 발생 여부에 관계없이 항상 실행되는 코드 }
throws 구문: 키워드 throw를 사용해 고의로 예외를 발생시킬수도 있다.
Exception e= new Exception( ) ; throw e; // 고의로 예외를 발생시킴void method() throws 예외처리클래스 {}
예외가 발생할 경우의 해결 방법
e.printStackTrace(); //명령어로 예외의 원인을 확인하고 해결할 수 있다. //예외 발생 당시의 호출스택에 있었던 메서드의 정보와 예외 메시지를 화면에 출력함.getMessage(); //발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
1. 멀티 스레드
2. Thread의 구현과 실행
(1) Thread 클래스를 상속받는 방법
class MyThread extends Thread { public void run() { /*작업내용*/ } //Thread클래스의 run() 을 오버라이딩 }
(2) Runnable 인터페이스를 구현하는 방법
class MyThread implements Runnable { public void run() { /*작업내용*/ } //Runnable 인터페이스의 run() 을 구현 }

3. 스레드의 실행