본문 바로가기

전체 글

(51)
18_자바 System 클래스 : exit 메소드, 프로그램 실행 소요 시간 구하기 00. System 클래스 -- java.lang.System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. -- System 클래스의 모든 필드와 메소드는 static으로 구성되어 있다. 01. exit 메소드 -- 개발을 하다보면 JVM을 강제로 종료시킬 때가 있는데, 이 때 exit 메소드를 사용한다. -- int형 매개값을 지정하도록 되어있는데, 이 값을 종료상태값이라고 부른다. -- 일반적으로 정상 종료일 경우 0으로 지정하고 비정상종료일 경우 다른 값을 지정한다. -- System.exit()이 실행되면 보안관리자(Security Manager)의 checkExit() 메소드가 자동 호출되는데, 이 때 종료상태값을 조사하여 특정 값이 입력되었을 때만 JVM이 종료되도록 할 수 있다..
17_자바 Objects 클래스 : 객체 비교(Comparator<T>) 00. 자바의 java.util.Objects 클래스를 최상위 클래스인 java.lang.Object 클래스와 헷갈리지 말자. 01. Comparator 인터페이스 구현을 통한 객체비교 - Comparator 인터페이스를 구현함으로써 특정 클래스 타입의 객체들을 비교할 수 있다. - Comparator 인터페이스를 구현하는 클래스는 int compare(T a, T b); 메소드를 재정의해야 한다. 먼저 실행클래스 내부에 Person클래스를 만들어줬다. Person 클래스의 필드는 주민번호 뒷자리, 나이, 키로 구성되어 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class ComparePersonExample { public static void ..
16_자바에서 객체 복제하기 : 얕은 복제와 깊은 복제 01. 객체 복제란? - 원본 객체의 필드값과 동일한 값을 가지는 새로운 객체를 생성하는 것. - 신뢰하지 않는 영역으로 객체를 넘길 때 객체를 복제해서 넘기면 원본 객체를 안전하게 보호할 수 있다. - 자바에서는 원본 객체가 java.lang.Cloneable 인터페이스를 구현하도록 함으로써 객체복제를 허용할 수 있다. 02. 얕은 복제 (thin clone) - 단순히 필드값을 복사해서 객체를 복제하는 것 - 필드가 기본 타입일 경우 값의 복사가 일어나고, 필드가 참조타입일 경우에는 객체의 번지가 복사 된다. - Object 클래스의 clone() 메소드를 사용하되, 리턴타입이 Object이므로 적절한 타입으로 형변환하여 사용하도록 한다. - clone() 메소드는 CloneNotSupportedEx..
15_자바 예외 처리 : try-with-resources, 사용자 정의 예외 클래스 자바에서 예외처리를 하는 기본적인 방법으로는 try-catch구문 활용하기와 예외 던지기가 있다. 그런 기본적인 것 말고, 조금 특이한 것들에 대해 적어보려고 한다. 01. try-with-resources try-with-resources는 자바 7에서 새로 추가된 기능이다. try블록이 정상적으로 실행을 완료했든 도중에 예외가 발생했든 자동으로 close() 메소드를 호출하여 리소스를 안전하게 닫아준다. try-with-resources를 사용하기 위해서는 AutoCloseable 인터페이스를 구현하고 있어야 한다. try-with-resources를 사용하지 않은 코드이다. close() 메소드 하나를 호출하기 위해 finally 구문 안에 또 try-catch 구문이 중첩되어 코드가 매우 복잡해보..
14_자바 예외 : 에러(Error)와 예외(Exception), 자바 예외의 종류 01. 에러와 예외 - 에러 : 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는 것. JVM 실행에 문제가 생겨 실행 불능 상태가 됨. 대처 불가 - 예외 : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류. 예외 처리를 통해 프로그램이 종료되지 않도록 대처 가능 02. 예외분류 03. 실행예외 일반예외 : 자바 소스를 컴파일하는 과정에서 예외 처리 코드가 필요한지 검사한다. 실행예외 : 컴파일러가 체크를 하지 않기 때문에 개발자의 경험에 의해서 예외 처리 코드를 삽입한다. 따라서, 실행 예외의 종류, 그리고 언제 그러한 예외가 발생하는지 평소에 잘 알아두는 것이 중요하다. 다음은 자바에서 가장 자주 볼 수 있는 실행예외들의 예시이다. 1) ..
13_중첩클래스(Nested Class) : 인스턴스 멤버 클래스, 정적 멤버 클래스, 로컬클래스(메소드 내부에 클래스 만들기) 01. 중첩클래스 - 클래스 내부에 선언된 클래스를 중첩클래스(Nested Class)라고 한다. - 중첩클래스로 선언하면 두 클래스 멤버들간의 접근성이 좋아지며 불필요한 관계클래스가 외부에서 보이지 않으므로 코드의 복잡성이 줄어든다. - 여러 클래스와 관계를 맺는 클래스는 독립적으로 선언하는 것이 좋고, 특정 클래스하고만 관계를 맺는 클래스는 중첩클래스로 선언하는 것이 좋다. 02. 중첩클래스의 분류 분류 선언 위치 설명 멤버클래스 인스턴스 멤버 클래스 class A { class B { ... } } A 객체를 생성해야만 사용할 수 있는 B 중첩 클래스 정적 멤버 클래스 class A { static class B {...} } A클래스로 바로 접근할 수 있는 B 중첩 클래스 로컬클래스 class A..
12_인터페이스(interface) : 인터페이스의 구성, 다중인터페이스 01. 인터페이스란 - 객체의 사용 방법을 정의한 타입 - class 키워드 대신 interface 키워드가 붙으며, 인터페이스를 구현하는 클래스는 implements 키워드를 사용함 - 개발코드와 객체가 서로 통신하는 접점이다. : 개발코드가 인터페이스의 메소드 호출 >> 인터페이스가 객체의 메소드 호출 - 인터페이스가 중간 역할을 해 주기 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없다 --> 개발코드를 수정하지 않고도 사용하는 객체를 변경할 수 있다. 1 2 3 4 5 6 7 8 9 10 interface 인터페이스명 { //상수 타입 상수명 = 값; //추상 메소드 - 무조건 오버라이딩 필요... 번거롭다. 타입 메소드명(매개변수,...); //디폴트 메소드 - 인터페이스에 선언되었으나 구..
11_상속(inheritance) : 다형성(Polymorphism), 자동형변환(Promotion), 강제형변환(Casting), instanceof 연산자, 추상클래스(abstract class) 01. 다형성 - 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질. 하나의 타입에 여러 객체를 대입하여 만든다. 02. 자동형변환(Promotion)과 강제형변환(Casting) - 부모 타입에는 모든 자식 객체가 대입될 수 있다. - 부모 타입으로 자동형변환된 자식객체는 강제형변환을 통해 다시 자식 타입으로 바꿀 수 있다. - 인터페이스 타입에는 모든 구현 객체가 대입될 수 있다. 예제) Dog 클래스가 Animal 클래스를 상속함 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Animal { //필드 String kind; //생성자 public Animal(String kind) { this.kind = kind; } //메소드 publ..