Java 52

상속의 개념

상속의 개념 현실의 세계에서 상속은 부모의 재산을 자손이 물려받는 것을 의미한다. 객체 지향에서 의미하는 상속은 재산 상속보다는 부모의 생물학적 특성을 물려받는 유전에 더 가깝다고 할 수 있다. 따라서 객체 지향에서 상속이 의미하는 바는 부모 클래스에 정의된 필드와 메소드를 자식 클래스가 물려받는 것이다. 상속이 이루어지면 자식 클래스는 부모 클래스에 정의된 필드와 메소드를 정의하지 않아도마치 정의한 것과 같은 효과가 있다. 한가지 분명히 하고자 하는 것은 상속은 클래스 사이의 상속이지 객체 사이의 상속이 아니라는 점이다. 자식 객체가 생성될 때 자식 클래스와 부모 클래스의 상속 관계에 따라 부모 클래스에 정의된 멤버를 가지고 생성된다. 1. 상속의 특성 1) 데이터와 함수의 중복성을 제거한다.2) 데이..

Java/Java 기본 2018.07.01

Annotation

Annotation - 어노테이션은 Java 5에 추가된 기능이다! - 클래스나 메소드 위에 붙으며, '@'로 시작 - 어노테이션을 클래스나 메타코드에 붙인 후, 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션에 설정된 값을 통하여 클래스가 좀 더 다르게 실행되게 할 수 있다. - 어노테이션은 자바가 기본으로 제공하는 것도 있고, 사용자가 직접 작성한 커스텀 어노테이션(custom annotation)도 있다. - 커스텀 어노테이션을 JVM이 실행시에 감지할 수 있도록 하려면 "@Retention(RetentionPolicy.RUNTIME)"를 붙여줘야 한다. i.e.@Retention(RetentionPolicy.RUNTIME)public @interface count100 { ... }

Java/Java 기본 2018.06.29

final

final final은 반드시 알아야 할 기본적인 키워드이다. final 키워드가 사용될 수 있는 곳은 세 군데이다. 1. final 클래스 final이 클래스 이름 앞에 사용되면 클래스를 상속받을 수 없음을 지정한다. 다음 예시의 FinalClass는 final 키워드가 클래스 선언 시에 사용 되었기 때문에, 다른 클래스가 이를 상속 받으려 할 경우 컴파일 오류가 발생하게 된다. i.e. final class FinalClass {...} class DerivedClass extends FinalClass { //컴파일 오류 발생...} 2. final 메소드 메소드 앞에 final 속성이 붙으면 이 메소드는 더 이상 오버라이딩할 수 없음을 지정한다. 자식 클래스가 부모 클래스의 특정 메소드를 오버라이..

Java/Java 기본 2018.06.29

static 멤버

static 멤버 1. static 멤버의 선언 다음과 같이 멤버 선언 시 앞에 static이라고 붙이기만 하면 된다. i.e. class StaticSample {int n; //non static field void g() { //non static method..} static int m; //static field static void f() { //static method...}} 2. non-static 멤버와 static 멤버의 차이 이제 non static 멤버와 static 멤버의 특징과 차이점을 살펴보자. 객체를 생성하지 않고도 사용할 수 있는 멤버를 static 멤버라고 부른다. 같은 클래스를 이용하여 객체들이 생성되어질 때에 각각의 객체들은 자신만의 필드들을 갖는다. 이들 필드는 인..

Java/Java 기본 2018.06.29

접근 지정자

접근 지정자 객체 지향 언어에는 기본적으로 접근 지정자의 개념이 있다. 객체를 캡슐화하기 때문에객체에 다른 객체가 접근하는 것을 허용할 것인지 말지를 지정할 필요가 있기 때문이다. 자바에서는 다음 4가지 접근 지정 방식을 정의하고 있다 - public- protected- private- 접근 지정자 생략 = default 1. 클래스 접근 지정자 클래스 접근 지정이란, 다른 클래스에서 이 클래스 이름을 사용할 수 있는지에 대한 허용 여부를 지정하는 것을 말한다. 클래스 접근 지정자는 클래스의 선언 부분에 표시되며, public, private, 그리고 접근 지정자 생략 이렇게 총 3가지가 있을 수 있다. - publicpublic 접근 지정자로 선언된 클래스는 어떤 다른 클래스에서도 사용할 수 있다. ..

Java/Java 기본 2018.06.28

자바 레퍼런스와 가비지 컬렉션

자바 레퍼런스와 가비지 컬렉션 자바의 가비지 컬렉터는 그 동작 방식에 따라 매우 다양한 종류가 있지만, 기본적으로 모든 자바 가비지 컬렉터는 공통적인 2가지 작업을 수행한다고 볼 수 있다. 1. 힙 내의 객체 중에서 가비지를 찾아낸다.2. 찾아낸 가비지를 회수해서 메모리 공간을 확보한다. 초창기의 자바에서는 이 gc의 작업에 사용자가 개입하지 못하도록 구현이 되어 있었다. 그러나, JDK 1.2 버전 부터는 java.lang.ref 패키지 내의 클래스들을 이용해서 가비지 컬렉션에 사용되는 레퍼런스에 개입할 수 있도록 구현을 하면서, 자바 가비지 컬렉터와 사용자 사이의 상호작용이 가능하게 만들었다. 이 java.lang.ref 패키지 내에는 총 4가지 종류의 레퍼런스 클래스가 있다. 전형적인 객체 참조의 ..

Java/Java Tips 2018.06.28

AutoClosable에서 이용해서 리소스 사용 예외 처리하기

AutoClosable에서 이용해서 예외 처리하기 자바 7부터, 리소스가 AutoCloseable 인터페이스를 구현하는 클래스에 속하는 경우 다음과 같은 코드 패턴에 대한 유용한 단축 기능을 제공한다.(참고로, 자바에서 리소스란, 자바 응용프로그램 내에서 접근 가능한 데이터 조각을 의미한다. i.e. 클래스 등.. 일반적으로, Class 클래스나 ClassLoader 클래스의 메소드들을 이용해서 리소스에 접근한다.) //리소스 열기try {...//리소스를 이용해서 작업을 한다....} catch (Exception e) {...//리소스를 닫는다...} AutoCloseable 인터페이스는 다음과 같은 단일 메소드를 포함한다 : void close() throws Exception 이 메소드를 이용해서..

Java/Java Tips 2018.06.27

가비지와 가비지 컬렉션

가비지(Garbage)와 가비지 컬렉션(Garbage Collection) 1. 가비지 (Garbage) 가비지란 응용프로그램에서 더 이상 사용되지 않는 메모리이다. 자바 응용프로그램에서 new 연산자를 이용하여 시스템으로부터 할당받아 사용하다 더 이상 사용하지 않는 객체나 배열 메모리가 가비지가 된다. 더 이상 사용하지 않는다는 뜻은 객체나 배열을 가리키는 레퍼런스가 하나도 없음을 의미한다. 2. 가비지 컬렉션 (Garbage Collection) 가비지는 더 이상 참조되지 않기 때문에 가비지가 차지하고 있는 메모리 공간은 회수되어야 한다. 가비지가 많아지면 상대적으로 자바 가상 기계에서 응용프로그램에게 할당해줄 수 있는 가용 메모리의 양이 줄어들게 된다. 자바에서는 시간이 지날수록 가비지가 점점 늘어..

Java/Java 기본 2018.06.26

객체의 소멸

객체의 소멸 자바에서는 객체를 생성하는 new 키워드와 생성자는 있지만 객체를 소멸시키는 기능은 없다. 또한 자바에서는 객체가 생성될 때 호출되는 생성자는 정의할 수 있지만, 소멸할 때 호출되는 소멸자 메소드는 정의할 수 없다. 객체 소멸이란 new에 의해 생성된 객체 메모리를 자바 가상 기계에게 돌려주어 가용 메모리(available memory)에 포함시키는 것이다. C++에는 new로 할당받은 객체가 더 이상 필요 없을 때 시스템에게 리턴할 수 있도록 delete 연산자를 두고 있으며, delete 연산자가 실행되어 객체가 소멸되면 소멸자가 호출된다. 소멸자의 역할은 객체가 사라지는 시점에서 필요한 마무리 작업을 수행하는 것이다. 예를 들어, 어떤 객체가 파일을 열어놓고 있다가 소멸되면 소멸자에서 ..

Java/Java 기본 2018.06.25