본문 바로가기

자바의 정석 정리

자바의 정석 - 8.3 사용자정의 예외 8.3.1 사용자정의 예외 만들기 기존의 예외를 상속받아 예외를 만들 수 있다. 💡 하지만, 가능하면 기존의 예외를 사용하는 것을 추천 class MyException extends Exception{ private final int ERR_CODE; MyException(String msg, int errCode){ super(msg); ERR_CODE = errCode; } MyException(String msg){ this(msg, 100); } public int getErrCode(){ return this.ERR_CODE; } } 💡 요즘은 checked에러보다 unchecked에러를 상속받아 작성을 하는 트렌드 더보기
자바의 정석 - 8.2 예외 발생시키기 8.2.1 예외 발생방법 new 연산자를 통해 예외 클래스의 객체 생성 키워드 throw를 통해 예외 발생 class A{ public static void main(String[] args){ try{ Exception e = new Exception("고의 발생"); throw e; //throw new Exception e; }catch(Exception e){ e.printStackTrace(); } } //컴파일 실패 //checked 예외 class A{ public static void main(String[] args){ throw new Exception(); //try-catch로 에러처리를 하지않아 에러 발생 } } //컴파일 성공 //하지만 런타임때 에러 //unchecked 예외 .. 더보기
자바의 정석 - 8.1 프로그램 에러 8.1.1 프로그램 에러 종류 컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 💡 컴파일 타임 때, 컴파일러가 소스코드(.java)를 클래스 파일(.class)파일로 생성을 한다. 런타임 때 클래스 파일이 실행된다. 8.1.2 에러와 예외 에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception) : 프로그램 코드에서 수습될 수 있는 다소 미약한 오류 8.1.3 예외 클래스의 계층구조 예외의 두 그룹 Exception클래스와 그 자손(RuntimeException제외) RuntimeException클래스와 그 자손 💡 Exception클래스들 : 사용자의 실수와 같은 외적.. 더보기
자바의 정석 - 7.11 내부 클래스 7.11.1 내부 클래스 두 클래스가 긴밀한 관계가 있을 때 사용 내부 클래스에서 외부 크래스의 멤버를 쉽게 접근 가능 캡슐화를 통해 코드의 복잡성을 낮춤 class A{ class B{} } 7.11.2 내부 클래스의 종류와 특징 인스턴스 클래스 스태틱 클래스 지역 클래스 익명 클래스 7.11.3 인스턴스 클래스 외부 클래스의 인스턴스 멤버처럼 다뤄짐 외부 클래스의 인스턴스 멤버들과 관련된 작업이 있을 경우 주로 사용 class A{ class B{} } 7.11.4 static 클래스 외부 클래스의 static 멤버처럼 다뤄짐 static 메서드에서 사용될 목적으로 선언 class A{ static class B{} } 7.11.5 지역 클래스 외부 클래스의 메서드나 초기화 블럭안에 선언 선언된 영역.. 더보기
자바의 정석 - 7.10 인터페이스 7.10.1 인터페이스(interface) 일반 메서드 및 멤버 변수를 가질 수 없는 클래스. 추상만 가질 수 있다. 다른 클래스 작성에 도움을 줄 목적으로 만듦 class의 Object처럼 최고 조상은 없다 💡 JDK 1.8이후로 static와 default 메서드는 생성 가능 💡 interface작성시 이름뒤에 '~able'을 붙여 메서드를 제공한다는 의미 강조하는게 좋음. 7.10.2 인터페이스 작성 class대신 interface를 사용 public or default 접근 제어자 사용 interface A{} 모든 멤버 변수는 public static final 이어야 하며, 생략 가능 모든 메서드는 public abstract 이어야 하며, 생략 가능 interface Card{ public .. 더보기
자바의 정석 - 7.9 추상 클래스 7.9.1 추상 클래스 abstract로 선언한 클래스 abstract class Test{} 추상 및 일반 멤버 변수와 메서드 생성 가능 추상 클래스로 지정되면 인스턴스 생성 불가 7.9.2 추상 메서드 abstract로 선언한 메서드 구현부가 없기 때문에 ';'로 마무리 abstract void a(); 추상 메서드로 선언된 것은 자식 클래스에서 꼭 구현부를 만들어야 함. 만약 구현하지 않을경우 자식 역시 추상 클래스로 구현해야 함 abstract class Player{ abstract void a(); abstract void b(); } abstract class A extends Playter{ void a(){} } //Error class A extends Playter{ void a(){.. 더보기
자바의 정석 - 7.8 다형성 7.8.1 다형성(polymorphism) 여러 가지 형태를 가질 수 있는 능력 부모 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있는 것 Parent p = new Child(); 다형성을 사용하는 경우 부모의 타입 참조변수는 자식에서 선언한 멤버 사용 불가 class Parent{ int a; } class Child extends Parent{ int b; } Parent p = new Child(); p.a //가능 p.b //불가 💡 클래스는 상속을 통해 확장될 수는 있어도 축소될 수 없기 때문에 부모 인스턴스의 멤버 개수는 자식 인스턴스의 멤버 개수보다 작거나 같다. 7.8.2 참조변수의 형변환 자식 → 부모(Up-casting) : 형변환 생략가능 자식 ← 부모(Down-ca.. 더보기
자바의 정석 - 7.7 제어자 7.7.1 접근제어자 및 제어자 접근 제어자 : public, protected, default, private 제어자 : static, final, abstract, native, transient, synchronized, volatile, strictfp 하나의 대상에 여러 제어자 조합하여 사용 가능 접근 제어자는 하나만 가능 7.1.2 static 클래스의, 공통적인 인스턴스에 관계없이 항상 같은 값 인스턴스를 생성하지 않고 사용가능 멤버변수, 메서드, 초기화블럭에서 사용 가능 💡 static은 메모리에 로딩될 때 단 한번만 수행. 주로 클래스변수(static)를 초기화 하는데 사용 7.1.3 final 변경될 수 없는 상수로 선언할 때 사용 클래스, 메서드, 멤버변수, 지역변수에서 사용 가능 💡.. 더보기