본문 바로가기

Java

(41)
[Java] 날짜와 시간 & 형식화 1. 날짜와 시간 1.1 Calendar와 Date JDK 1.8부터 'java.time패키지'로 기존의 단점들을 개선한 새로운 클래스들이 추가되었다. - Calendar와 GregorianCalendar * Calendar를 상속받아 완전히 구현한 클래스로는 GregorianCalendar(오늘날 전세계 공통으로 사용하고 있는 그레고리력에 맞게 구현한 것)와 BuddhistCalendar가 있는데, getInstance()는 시스템의 국가와 지역설정을 확인해서 태국인 경우에는 BuddhistCalendar의 인스턴스를 반환하고, 그 외에는 GregorianCalendar의 인스턴스를 반환한다. - Date와 Calendar간의 변환 Calendar가 새로 추가되면서 Date는 대부분의 메서드가 'dep..
[Java] java.lang패키지와 유용한 클래스1 1. java.lang패키지 1.1 Object클래스 모든 클래스의 최고 조상이기 떄문에 Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능하다. 1) protected Object clone() - 객체 자신의 복사본을 반환한다. - Object클래스에 정의된 clone()은 단순히 인스턴스변수의 값만을 복사하기 때문에 참조변수 타입의 인스턴스 변수가 정의되어 있는 클래스는 완전한 인스턴스 복제가 이루어 지지 않는다. ex. 배열의 경우, 복제된 인스턴스도 같은 배열의 주소를 갖기 때문에 복제된 인스턴스의 작업이 원래의 인스턴스에 영향을 미치게 된다. 이런 경우 clone메서드를 오버라이딩해서 새로운 배열의 내용을 복사하도록 해야한다. 2) public boolean equals(Obecjt ..
[Java] 예외처리 1. 예외처리(Exception handling) 1.1 프로그램 오류 - 컴파일 에러 : 컴파일 시에 발생하는 에러 - 런타임 에러 : 실행 시에 발생하는 에러 - 논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것 - 에러(error) : 프러그램 코드에 의해서 수습될 수 없는 심각한 오류 ex. 메모리 부족(OutOfMemory Error), 스택오버플로우(StackOverflowError), ... - 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 1.2 예외 클래스의 계층구조 - RuntimeException클래스와 그 자손클래스들 : 프로그래머의 실수로 발생하는 예외 - Exception클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는..
[Java] 객체지향 프로그래밍 5 1. 추상클래스(abstract class) - 미완성 메서드(추상메서드)를 포함하고 있다. - 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조사클래스로서 중요한 의미를 갖는다. - 키워드 'abstract'를 붙이기만 하면 된다. [참고] 추상메서드를 포함하고 있지 않은 클래스에도 키워드 'abstract'를 붙여서 추상클래스로 지정할 수도 있다. 추상메서드가 없는 완성된 클래스라 할지라도 추상클래스로 지정되면 클래스의 인스턴스를 생성할 수 없다. 1.1 추상메서드(abstract method) 메서드를 미완성 상태로 남겨 놓는 이유는 메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에는 선언부만을 작성하고, 주석을 덧붙여 어떤 기능을 수행할..
[Java] 객체지향 프로그래밍 4 1. 제어자(modifier) 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. - 접근 제어자 : public, protected, default, private - 그 외 : static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 클래스나 멤버변수와 메서드에 주로 사용되며, 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있다. [참고] 제어자들 간의 순서는 관계없지만 주로 접근 제어자를 제일 왼쪽에 놓는 경향이 있다. 1.1 static - 클래스의, 공통적인 인스턴스변수는 하나의 클..
[Java] 객체지향 프로그래밍 3 1. 상속(ingeritance) 1) 상속의 정의와 장점 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. 자바에서 상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다. [참고] 서로 상속관계에 있는 두 클래스를 아래와 같은 용어를 사용해서 표현하기도 한다. - 조상 클래스 : 부모(parent)클래스, 상위(super)클..
[Java] 객체지향 프로그래밍 2 1. JVM의 메모리 구조 응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. 1) 메서드영역(method area) - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다. 2) 힙(heap) - 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스변수(instance variable)들이 생성되는 공간이다. 3) 호출스택(call stack 또는 ..
[Java] 객체지향 프로그래밍 1 1. 객체지향언어 1) 코드의 재사용성이 높다. - 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다. 2) 코드의 관리가 용이하다. - 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 3) 신뢰성이 높은 프로그래밍을 가능하게 한다. - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다. 객체지향의 개념을 학습할 때 재사용성과 유지보수 그리고 중복된 코드의 제거, 이 세 가지 관점에서 보면 보다 쉽게 이해할 수 있다. 너무 객체지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점..