대표적인 예외의 종류 RuntimeException 1. ArithmeticException - 산술 연산에서 예외 조건이 발생했을 때 발생 class ArithmeticExceptionPractice { public static void main(String args[]) { try { int a = 10; int b = 0; int c = a / b; } catch (ArithmeticException e) { System.out.println("0으로 나눌 수 없습니다."); } } } 2. ArrayIndexOutOfBoundsException - 잘못된 인덱스로 Array에 액세스했을 때 발생 class ArrayIndexOutOfBoundsPractice { public static void main(String .. 예외 예외 vs 에러 예외 연산 오류, 숫자 포맷 오류 등과 같이 상황에 따라 개발자가 해결할 수 있는 오류 에러 자바 머신 자체에서 발생하는 오류로 개발자가 해결할 수 없는 오류 예외 처리 오류가 발생했을 때 차선책을 제시함으로써 오류를 피하는 과정 예외 클래스의 상속 구조 일반 예외 & 실행 예외 일반 예외 : 컴파일 전에 체크 가능 - Exception으로부터 상속 실행 예외 : 예외 처리를 하지 않아도 컴파일은 가능하나, 실행 중 예외가 발생하면 프로그램 종료 - RuntimeException으로부터 상속 예외 처리 try { // 일반 예외, 실행 예외 발생 가능 코드 } catch (예외 클래스명 참조 변수명) { // 예외가 발생했을 때의 처리 } finally { // 예외 발생 여부와 관계없이.. 인터페이스 인터페이스의 구조 모든 필드가 public static final로 정의 static default 메서드 이외 모든 메서드는 public abstract로 정의 인터페이스의 상속 implements 키워드 사용 다중 상속이 가능 여러 개의 인터페이스를 사용할 때 ,로 구분해 나열 모든 필드가 public static final로 정의돼 있어 실제 데이터값은 각각의 인터페이스의 내부에 존재해 공간상 겹치지 않음 메서드도 모두 미완성이어서 자식 클래스 내부에서 완성해 사용하므로 문제 x 클래스가 인터페이스를 상속할 때 주의사항 자식 클래스는 반드시 미완성 메서드를 구현해야 함 자식 클래스의 구현 메서드는 반드시 public이어야 함 인터페이스 타입의 객체를 생성하는 방법 인터페이스를 일반 클래스로 상속해 .. 상속 상속의 장점 코드의 중복성 제거 다형적 표현 가능 다형성(polymorphism) - 객체를 여러 가지 모양으로 표현할 수 있는 특징 다형적 표현으로 얻을 수 있는 것 : 여러 객체를 배열 하나에 관리할 수 있게 됨 상속의 특징 : 자바 클래스는 다중 상속이 불가능함 생성자의 상속 여부 : 생성자는 자식 클래스로 상속되지 않음 객체의 타입 변환(casting) 자바는 등호를 중심으로 왼쪽과 오른쪽의 자료형이 일치해야 함 자료형이 다르면 컴파일러가 자동으로 타입을 변환해 주거나, 개발자가 직접 명시적으로 타입을 변환해야 함 1) 업 캐스팅 자식 클래스에서 부모 클래스로 변환 - 컴파일러가 자동으로 처리 2) 다운 캐스팅 부모 클래스에서 자식 클래스로 변환 - 개발자가 직접 명시 선언 타입에 따른 차이점 c.. 접근지정자 - Abstract abstract - 추상적인 abstract 제어자를 사용했을 때의 장점 상속받은 클래스에서 반드시 오버라이딩을 통해 재정의를 해 주어야 하므로 오류가 생겼을 때 바로 발견할 수 있음 추상 클래스 추상 메서드(abstract 메서드)를 1개 이상 포함하고 있는 클래스 추상 클래스의 특징 미완성 메서드이기 때문에 객체를 직접 만들 수 없음 A a = new A()와 같이 생성자 호출 자체를 할 수가 없음 반드시 상속하여 자식 클래스에서 객체를 생성해야 함 추상 클래스를 상속하는 자신 클래스는 부모에게 상속받은 추상 메서드를 반드시 오버라이딩해야 함 추상 클래스 타입의 객체 생성 방법 추상 클래스를 일반 클래스로 상속하여 객체를 생성 - 객체를 여러 개 만들어야 하는 상황에 사용 익명 이너 클래스 사용 - .. 접근지정자 - Final 필드, 지역 변수, 메서드, 클래스 앞에 위치할 수 있음 final 변수 - final 필드, final 지역변수 final 제어자는 변수를 선언할 때만 지정할 수 있음 final 변수는 한 번 대입된 값은 변경할 수 없음 - 한 번 대입된 값이 최종값이 됨 final 메서드 상속할 때 부모의 메서드를 오버라이딩하면 자식의 클래스에서는 메서드의 기능이 변경됨 final로 메서드를 정의하면 자식 클래스에서 해당 메서드를 오버라이딩할 수 없음 final 클래스 최종 클래스의 의미로 더 이상 클래스가 없음 final 클래스는 상속 자체가 아예 불가능함 대표: String 클래스도 final 클래스로 정의되어 있으므로 상속받는 클래스를 생성할 수 없음 접근지정자 - static(정적 멤버) 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 제어자 static이 붙어 있는 멤버 = 정적 멤버 정적 멤버의 특징 = 객체의 생성 없이 ‘클래스명.멤버명’으로 바로 사용 가능 인스턴스 필드와 정적 필드 정적 필드는 객체 간 공유 변수의 성질이 있음 정적 멤버는 객체 생성 없이 사용이 가능함 인스턴스 메서드와 정적 메서드 정적 메서드는 객체 생성 없이 사용 가능함 정적 메서드 안에서 사용할 수 있는 필드와 메서드 정적 메서드 내에서는 정적 필드 또는 메서드만 사용할 수 있음 this 키워드를 사용할 수 없음 정적 초기화 블록 : 정적 필드를 초기화하기 위한 문법 static { // 클래스가 메모리에 로딩될 때 실행되는 내용 } : 클래스가 메모리에 로딩될 때 가장 먼저 실행 - 정적 필드의 초.. 접근지정자 멤버 및 생성자의 접근 지정자 public, protected, default, private의 접근 지정자 사용 가능 아무것도 사용하지 않으면 default 접근 지정자가 자동 설정 접근 지정자 사용 가능 범위 public 동일 패키지의 모든 클래스 + 다른 패키지의 모든 클래스 protected 동일 패키지의 모든 클래스 + 다른 패키지의 자식 클래스 default 동일 패키지의 모든 클래스 private 동일 클래스 클래스의 접근 지정자 public, default 접근 지정자만 사용 가능 default - 같은 패키지 내에서만 사용 가능 → 다른 패키지에서 임포트가 불가능해 사용할 수 없게 됨 public - 다른 패키지에서도 사용 가능 클래스 접근 지정자와 생성자 접근 지정자의 연관성 자동적으로.. 클래스 외부 구성 요소 #3. 외부 클래스 public 클래스 외부에 추가로 정의된 클래스 1개 소스 파일 내에서 public 클래스를 제외한 모든 클래스는 외부 클래스 외부 클래스는 같은 패키지 안에서만 사용이 가능 클래스 외부 구성 요소 #2. 임포트 임포트: 다른 패키지 내의 클래스를 사용하기 위한 문법 요소 소스 코드상 패키지 구문 다음 줄에 위치 프로그램이 동작할 때 일반적으로 자신의 패키지 내부에 위치한 클래스만 사용 가능함 임포트 시 주의사항 *기호를 사용하면 패키지 내부의 모든 클래스 임포트 가능 but! 하위 패키지의 클래스는 임포트되지 않음 참고! 이클립스 내 Ctrl + Shift + O 를 사용하면 관련 클래스를 임포트해 줌 import abc.*; public class packageTest { public static void main(String[] args) { Abc abc = new Abc(); } } 클래스 외부 구성 요소 #1. 패키지 패키지: 비슷한 목적으로 생성된 클래스 파일들을 한곳에 모아 둔 폴더 패키지 사용의 장점 - 클래스명의 충돌 방지 참고! 동일한 이름의 여러 클래스는 import가 불가능 동일한 이름의 클래스가 여러 패키지에 포함된 경우 패키지이름.클래스 이름 형식으로 사용해야 함 aaa.A.hello(); bbb.A.hello(); 다른 패키지의 클래스 사용 방법1. 클래스의 풀네임(= 패키지명.클래스명) 사용 public class A { // bbb 패키지에 포함되어 있는 A 클래스 bbb.A b = new bbb.A(); } } 다른 패키지의 클래스 사용 방법2. import 구문을 사용 package aaa; import bbb.A; public class C { public static void main(St.. 이전 1 다음