1. 접근지정자(Access Modifier)
접근지정자 | 어디에 쓰일수 있는가? | 접근가능한 곳 |
private | 필드, 메소드 | 클래스 내부에서만 접근 |
default(package) | 클래스, 필드, 메소드 | 접근지정자는 아님, 같은 페이지의 클래스에서 접근 |
protected | 필드, 메소드 | 같은 패키지 클래스 내에서 접근 가능. 즉, 다른패키지의 클래스가 상속받아 접근 가능 |
public | 클래스, 필드, 메소드 | 모든 클래스에서 접근가능 |
- 가장 까다로운것 : private > default > protected > public
- public : 소스안에서 public접근지정자로 지정한 class가 하나만 존재해야만 한다.
2. 인터페이스
public interface 인터페이스명 {
자료형 변수명=값;//public static final 생략
...
반환형 메소드명(매개변수,...);//public abstract 생략
...
}
기본 요소 : 상수필드 + 추상메소드 (단, 2개를 같이 쓰는 경우는 별로없음)
- 인터페이스를 이용하여 인스터스 생성 불가 (생성자가 없기 때문)
- 인터페이스는 클래스가 상속받아 사용한다.(클래스의 부모 역할)
- 다중상속이 가능하다
- 인터페이스를 상속받은 클래스는 반드시 인터페이스의 모든 추상메소드를 오버라이드 선언 >> 실체화 작업
- 인터페이스를 이용하여 참조변수를 생성하고 자식인스턴스 정보를 저장하여 객체 형변환으로 접근 가능
- 인터페이스는 기존 인터페이스 상속 가능(extends사용)
- 부모인터페이스끼리도 형변환이 가능하다. (공유가 가능하다)
왜 사용하는가?
- Java 프로그램 작성시 단일상속의 문제점을 보완하기 위해 인터페이스 사용
- 클래스 간의 결합도를 낮춰 시스템 변경에 대한 프로그램 유지보수의 효율성 증가 (결합도를 낮추는게 개발자의몫!!)
- 작업명세서의 역할을 한다(상속받은 자식클래스의 메소드 작성규칙을 제공)
참고 ) refractor을 이용하면 클래스들의 공통점을 뽑아내어 interface를 만들수있다.
기본메소드(default method)
- 기본메소드를 호출하기 위해서는 반드시 참조변수를 인터페이스로 생성해야함
- 오버라이드선언 한 경우 자식클래스의 오버라이드 메소드를 호출
package realization;
public interface Printable {
void print();
//JDK 1.8이상에서는 인터페이스에 명령을 작성 가능한 기본 메소드 선언
//=>메소드 선언시 default키우드를 이용하여 선언
//기본메소드(default) : 인터페이스를 상속받은 자식클래스에
//=>오버라이드 선언하지 않아도 되는 메소드
//오버라이드 선언하지 않은 경우 기본메소드가 선언된다.
default void scan() {
System.out.println("[에러] 스캔기능을 제공하지 않습니다.");
}
}
3. Enum(나열형)
- 클래스(또는 인터페이스)에서 상수필드를 선언할 경우, 문제점이 다음과 같이 생긴다.
1. 상수필드로 값을 대표적으로 표현하기 부적절하다. |
2. 상수필드가 의미있는 문자열로 표현되지 않는다. |
3.상수필드가 선언된 클래스(또는 인터페이스)가 무의미하다. |
=>그래서 JDK 1.5 에서 나열형 자료형을 추가하였다.
[특징]
- 상수필드를 선언하기 위한 자료형 (단, 같은 자료형의 변수에 저장 불가능하다) ex) int -> int에 저장불가
- 필드값 대신 의미있는 문자열로 출력됨
- 상수필드는 enum 타입으로 생성된 변수에만 저장이 가능하다
- enum 타입자체가 변수를 생성하기 위한 자료형으로 사용됨
- 나열형에서 선언된 상수필드만 변수에 저장가능하다.
package Enumerate;
public enum StringEnum {
//생성자를 선언한 경우 상수필드 선언시 초기값을 전달해야만 상수필드가 생성됨.
INSERT("insert"), UPDATE("update"), DELETE("delete"), SELECT("select"); //내부적으로는 자동으로 0,1,2,3이 들어감
//상수필드에 원하는 자료형 또는 값을 저장하기위해 필드를 선언
//private final 필드로 선언해 주어야함
//상수필드에 원하는 값을 저장하기 위해 반드시 생성자를 선언
private final String value;
//상수필드에 초기값을 전달하여 저장하기 위한 생성자 선언
//생성자는 반드시 private접근지정자를 이용하여 은닉화 선언해야함
//매개변수에 전달된 값을 필드에 저장하면 상수필드값으로 초기화됨
private StringEnum(String value) {
this.value = value;
}
//상수필드의 값을 확인하기 위해 만든 메소드
public String getValue() {
return value;
}
}
4. 예외처리
예외처리란?
예외가 발생된 경우 예외를 처리하기 위한 방법
예외처리를 왜 하는가?
프로그램 사용자에게 메세지를 제공하거나, 개발자에게 에러로그를 제공하기 위해서!
예외처리를 처리하는 클래스
Trowable : 프로그램 오류에 관련된 최상위 클래스
Error : 하드웨어에 의해 발생하는 오류 처리를 위한 상위클래스
Exception : 소프트웨어에 의해 발생하는 오류를 처리하기 위한 상위 클래스
예외의 종류
- 작성 관련 예외 : 예외처리를 하지 않을 경우 컴파일에러 발생 >> RuntimeException클래스를 상속받지 않는 클래스로 예외처리
- 실행관련 예외 : 프로그램을 실행할 경우 예외발생 >> RuntimeException클래스를 상속받아 자식클래스로 예외처리
예외처리 방법
형식) try {
예외가 발생될수 있는 명령; ...
} catch(예외클래스 참조변수) {
예외처리명령; ...
} finally {
무조건 실행 명령; ...
}
try | catch | finally |
1. 예외가 발생되는 명령은 try영역에 작성 2. try영역의 명령이 실행 될 때 예외가 발생되는지 감시 3. 예외가 발생되면, 발생된 명령 하단에 작성된 명령을 미실행 |
1. 예외가 발생된 경우, catch영역의 명령을 실행 2. catch 구문의 참조변수의 예외 클래스의 인스턴스를 전달받아 처리 *e.getMessage() : 전달받은 예외 인스턴스의 에러메세지를 반환한다. *e.printStackTrace() : 에러가 발생된 흐름을 추적해서 보여준다. |
예외와 상관없이 실행되는 명령을 작성 (잘 생략됨) |
모든 명령을 try문에 넣어버리게 되면 실행할 때마다 try검사를 하므로 속도가 느려질 수 있으니 꼭 필요할때만 사용할것
'💻 수업정리 (2020) > 자바' 카테고리의 다른 글
[5/28] java.lang패키지 (0) | 2020.05.28 |
---|---|
[5/27] ★★★ 예외전달, 다중스레드 (0) | 2020.05.27 |
[5/25] abstract 클래스/메소드, 패키지와 인터페이스 (0) | 2020.05.25 |
[5/22] 오버라이드와 객체 형변환 (0) | 2020.05.22 |
[5/21] 클래스와 상속, 인터페이스 (0) | 2020.05.21 |