프로그래밍 (54) 썸네일형 리스트형 예외 처리 컴파일러는 컴파일을 할 때 일반 예외가 발생할 가능성이 있는 코드를 발견하면 에러를 발생시켜 개발자가 강제적으로 예외 처리 코드를 작성하도록 요구 예외 처리 코드 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(...)를 호출해서 추상 클래스 객체를 생성하기 때문에 추상 클래스도 반드시 생성자 필요 추상 메소드와 재정의 추상 클래스는 실체 클래스의 멤버(필드, 메소드)를 통일하는 목적 모든 실체들이 가지는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 것이 좋음 하지만 메소드의 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우가.. 타입 변환과 다형성 다형성 사용방법은 동일하지만 다양한 객체를 이용해서 다양한 실행 결과가 나오도록하는 성질 ex) 팥 붕어빵, 슈크림 붕어빵 public class A{ } public class B extends A{ } public class Test{ public static void main(String[] args){ B b = new B(); A a = b; A aa = new B(); } } 자식 타입은 부모 타입으로 자동 형변환 가능 바로 부모 자식 관계가 아니라 상속 계층에 속하면 자동 타입 변환 가능 class A{} class B extends A{} class C extends B{} class D extends A{} class E extends D{} public class test{ public.. 상속 extends사용 public class B extends A{ } 상속 특징 Java에서 다중상속(자식기준)을 지원 X 하나 이상의 부모를 둘 수 없다 여러 자식을 두는 것은 가능 부모 클래스에서 private 접근제한자가 붙은 필드와 메소드는 상속에서 제외 자식객체만 생성하더라도 부모객체가 먼저 생성된 후에 자식객체 생성 public class A{ A(){ System.out.println("A Class"); } } public class B extends A{ B(){ System.out.println("B Class"); } } public class Test{ public static void main(String[] args){ B b = new B(); } } Test에서 자식 Class.. 이전 1 2 3 4 5 6 7 다음