프로그래밍/Java (20) 썸네일형 리스트형 멀티 스레드 각 프로세스는 서로 독립적이여서 하나의 프로세스에서 오류가 나더라도 다른 프로세스에 영향을 미치지않음 멀티 스레드는 하나의 프로세스 내부에 생성되기 떄문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있음 싱글 스레드는 어플리케이션은 메인 스레드가 종료되면 어플리케이션 종료 멀티 스레드 어플리케이션은 실행 중인 스레드가 하나라도 있으면 종료되지 않음 작업 스레드 생성과 실행 멀티 스레드로 실행하는 프로그램 개발시 몇 개의 작업을 병렬로 실행할지 결정하고 각 작업별로 스레드 생성 스레드도 객체로 생성 java.lang.Thread 클래스를 직접 객체화 해도 되지만 상속해서 하위클래스로 객체생성도 가능 Thread 클래스로부터 직접 생성 Thread thread = new Thread(Run.. Java api Object 클래스 extends 키워드로 다른 클래스를 상속하지 않으면 기본적으로 java.lang.Object클래스를 상속 객체 비교 equals() 객체가 저장하고 있는 데이터 비교 객체 해시코드 hashCode() 객체를 식별하는 정수값 객체의 메모리 번지를 이용해서 해시코드를 리턴 객체 문자 정보 toString() public class Test{ public static void main(String[] args){ Car car = new Car(); String name = new String("홍길동"); System.out.println(car.toString()); System.out.println(name.toString()); } } -------------------------.. 예외 처리 컴파일러는 컴파일을 할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 에러를 발생시켜 개발자가 강제적으로 예외 처리 코드를 작성하도록 요구 예외 처리 코드 try-catch-finally블록 생성자 내부와 메소드 내부에서 작성 일반 예외와 실행 예외가 발생할 경우 예외 처리 try{ //예외 발생 가능 코드 } catch(/*예외클래스 e*/){ //예외 처리 //예외가 발생하지 않으면 finally블럭 실행 //예외가 발생하면 예외 처리 후 finally블럭 실행 } finally{ //항상 실행 //finally블럭은 작성 안해주어도 무관 } finally블럭은 무조건 실행이라 try나 catch블럭에서 return문을 사용해도 실행된다 예제) Class.forName()메소드는 매개값으로 주.. 예외 클래스 예외와 예외 클래스 예외는 일반 예외와 실행 예외가 있다 일반 예외(컴파일러 체크 예외) 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 컴파일하는 과정에서 해당 예외 처리 코드가 있는지 검사 예외 처리 코드가 없다면 컴파일 오류 실행 예외(컴파일러 넌 체크 예외) 실행 시 예측할 수 없이 갑자기 발생하기 때문에 컴파일하는 과정에서 예외 처리코드가 있는지 검사 X 일반 예외와 실행 예외 클래스는 RuntimeException 클래스를 기준으로 구별 RuntimeException의 하위 클래스이면 실행 예외 클래스 아니면 일반 예외 클래스 클래스 상속 관계에서 부모(조상)에 RuntimeException이 있으면 실행 예외 클래스 실행 예외 컴파일러가 체크하지 않기 때문에 개발자의 경험에 의해서 예외.. 익명객체 익명객체 이름이 없는 객체 익명객체를 만드는 조건은 어떤 클래스를 상속하거나 인터페이스를 구현하는 경우 일반적인 경우 상속 (인터페이스)구현 class 자식 extends 부모클래스{...} 부모클래스 변수 = new 자식(); class 구현클래스 implements 인터페이스{...} 인터페이스 변수 = new 구현클래스(); 익명객체를 사용할 경우 상속 (인터페이스)구현 부모클래스 변수 = new 부모클래스(){...}; 인터페이스 변수 = new 인터페이스(){...}; 상속 Test클래스 안에서 A의 자식객체로 익명객체를 생성하는 경우 A public class A{ int fieldA; void methodA(){ System.out.println("A"); } } C(일반적인 자식 클래스) .. 중첩 클래스와 중첩 인터페이스 중첩 클래스 클래스 내부에 선언한 클래스 중첩 클래스 class ClassName{ class NestedClassName{ } } 중첩 인터페이스 class ClassName{ interface NestedInterfaceName{ } } 선언 위치에 따른 분류 선언 위치 설명 멤버 클래스 인스턴스 멤버 클래스 class A{ class B{...} } A 객체를 생성해야만 사용할 수 있는 B 클래스 정적 멤버 클래스 class A{ static class B{...} } A 클래스로 바로 접근할 수 있는 B 클래스 로컬 클래스 class A{ void method(){ class B{...} } } method()가 실행할 때만 사용할 수 있는 B 클래스 인스턴스 멤버 클래스 A 클래스 내부 중첩 클.. 인터페이스 인터페이스 객체의 사용 방법을 정의한 타입 인터페이스는 외형적으로 추상 클래스와 비슷 하지만 인터페이스를 생성할 때 class를 쓰지않고 interface 인터페이스이름{ } 이런 형식으로 씀 인터페이스를 상속받을 때에는 implements 키워드 사용 인터페이스에서는 상수 필드와 추상 메소드만을 멤버로 가짐 인터페이스는객체로 생성할 수 없기 때문에 생성자 X 추상 클래스와 인터페이스는 상속받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메소드를 강제로 구현하게 함 추상 클래스와 인터페이스의 차이 추상클래스는 이 추상 클래스의 멤버들을 상속받아서 기능을 이용하고 확장시키는데 있는 반면 인테페이스는 함수선언만 있고 정의는 없다 이유는 그 함수의 구현을 강제하기 위해 구현을 강제함으로써 구현 객체의 같.. 추상 클래스 객체를 직접 생성 할 수 있는 클래스는 실체 클래스 클래스들의 공통적인 특성을 추출해서 선언한 클래스 추상 클래스와 실체 클래스는 상속관계(추상 클래스가 부모) 추상 클래스 키워드는 abstract abstract 키워드를 붙이면 new 연산자로 객체 생성 불가 new 연산자로 직접 생성자를 호출은 불가능 하지만 자식 객체가 생성될 때 묵시적으로 super(...)를 호출해서 추상 클래스 객체를 생성하기 때문에 추상 클래스도 반드시 생성자 필요 추상 메소드와 재정의 추상 클래스는 실체 클래스의 멤버(필드, 메소드)를 통일하는 목적 모든 실체들이 가지는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 것이 좋음 하지만 메소드의 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우가.. 이전 1 2 3 다음