본문 바로가기

JAVA의 정석

(39)
String 클래스 1. String 클래스 기존의 다른 언어에서는 문자열을 char형의 배열로 다루었으나 자바에서는 문자열을 위한 클래스를 제공한다. String클래스는 문자열을 저장하고 이를 다루는데 필요한 메서드를 함께 제공한다. String 클래스는 변경 불가능한 (immutable) 클래스 String클래스에는 문자열을 저장하기 위해서 문자형 배열 참조변수(char[]) value를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수에 문자형 배열(char[])로 저장되는 것이다. 한 번 생성된 String인스턴스가 갖고 있는 문자열은 읽어올 수 만있고 변경할 수는 없다. 예를 들어 아래코드와 같이 '+' 연산자를 이용해서 문자열을 결합하는 경우 인스턴스 내 문자열이 바..
Object 클래스 1. Object 클래스 Object 클래스는 모든 클래스의 최고 조상이기 때문에 Object 클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다. Object 클래스의 메서드 설 명 protected Object clone() 객체 자신의 복사본을 반환한다. public boolean equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지 알려준다. (같으면 true) protected void finalize() 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출된다. 이 때 수행되어야하는 코드가 있을 때 오버라이딩한다. (거의 사용안함) public Class getClass() 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환한다. public int has..
예외 처리(4) - 사용자 정의 예외 만들기, 연결된 예외 1. 사용자 정의 예외 만들기 기존의 정의된 예외 클래스 외에 필요에 따라 프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다. 보통 Exception클래스 또는 RuntimeException클래스로부터 상속받는 클래스를 만들지만, 필요에 따라서 알맞은 예외를 선택할 수 있다. RuntimeException 클래스로부터 상속 받아서 MyException 클래스를 만들었다. 필요하다면, 멤버변수나 메서드를 추가할 수 있다. RuntimeException 클래스는 생성 시에 String 값을 받아서 메시지로 저장할 수 있다. 직접 만든 사용자정의 예외 클래스도 메세지를 저장하게 만드려면 위 예제처럼 String을 매개변수로 받는 생성자를 추가해주어야 한다. 이전의 코드를 좀더 개선하여 메시지뿐만 아니..
예외 처리(3) - 예외 발생시키기, 예외 떠넘기기 1. 예외 발생시키기 키워드 throw를 사용하면 프로그래머가 고의로 예외를 발생시킬 수 있으며, 방법은 아래의 순서를 따른다. 1. 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든다. Exception e = new Exception("예외 발생"); 2. 키워드 throw를 이용해서 예외를 발생시킨다. throw e; 객체만 생성해서는 예외를 발생시키지 않으므로 반드시 throw를 써줘야 한다. 이 때 Exception 인스턴스를 생성할 때 위와 같이, 생성자에 String을 넣어주면, 이 String이 Exception 인스턴스에 메시지로 저장된다. 이 메시지는 getMessage()를 이용해서 얻을 수 있다. 2. checked 예외, unchecked 예외 (1) checked ..
예외 처리(2) - try-catch의 흐름, 멀티 catch블럭 1. try-catch 문에서의 흐름 try-catch문에서, 예외가 발생한 경우와 발생하지 않았을 때의 흐름을 알아보자 try블럭 내에서 예외가 발생한 경우, 1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다. 2. 일치하는 catch블럭을 찾게 되면, 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 게속해서 수행한다. try블럭 내에서 예외가 발생하지 않는 경우, 1. catch블럭을 거치지 않고 전체 try-catch 문을 빠져나가서 수행한다. 위의 예제에서는 예외가 발생하지 않았으므로 catch 블럭의 문장이 실행되지 않았다. 위의 결과를 보면, 1을 출력한 다음 try블럭에서 예외가 발생했기 때문에 try블럭을 바로 벗어나서 2는 출력되..
예외 처리(1) - 정의와 구조 1. 프로그램 오류 에러는 발생시점에 따라 컴파일 에러, 런타임 에러, 논리적 에러로 나눌 수 있다. 컴파일에러는 컴파일시에 발생하는 에러 , 런타임 에러는 실행 시 발생하는 에러, 논리적 에러는 실행은 되지만 의도와 다르게 동작하는 에러를 뜻한다. 소스코드를 컴파일하면 컴파일러가 소스코드(*.java)에 대해 오타나 잘못된 구문, 자료형 체크 등의 기본적인 검사를 수행하여 성공적으로 마치고 나면, 클래스 파일(*.class)이 생성되고 , 생성된 클래스 파일을 실행할 수 있다. 하지만 컴파일을 에러 없이 성공적으로 마쳤다고 해서 프로그램 실행 시에도 에러가 발생하지 않는 것은 아니다. 컴파일러가 실행 도중 발생할 수 있는 잠재적인 오류까지 검사할 수 없기 때문에 컴파일은 잘 되었어도 실행 중에 에러에 ..
익명 클래스 (anonymous class) 익명 클래스는 말 그대로 이름이 없는 클래스를 말한다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다. new 조상클래스 이름(){ // 멤버 선언 } new 구현인터페이스이름(){ //멤버 선언 } 이름이 없기 때문에 생성자도 가질 수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다. 오로지 단 하나의 클래스를 상속 받거나 단 하나의 인터페이스만 구현할 수 있다. 다음은 인스턴스 클래스를 익명 클래스로 바꾸는 연습 예제이다. public class Ex7_17 { Object iv ..
내부 클래스 (inner class) 1. 내부 클래스 (inner class) 내부 클래스는 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문이다. 한 클래스를 다른 클래스의 내부클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스 를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점을 얻을 수 있다. 내부 클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 다만 내부 클래스는 외부 클래스에서 사용하기 위해 만들어진 클래스인 것을 알고 사용하는 것이 좋다 . 만약 내부 클래스를 main에서 쓰려고 하다 보면 객체 생성부터 멤버 사용까지 오히려 복잡한 경우 혹은 복잡한 코드를 사용해야 될 수 있음으로 ..