본문 바로가기

728x90

분류 전체보기

(130)
자바에서 애너테이션(Annotation) 직접 정의하기 애너테이션이란, 주석처럼 프로그래밍 언어에 영향을 미치지는 않으면서도 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킴으로써 다른 프로그램에게 유용한 정보를 제공할 수 있는 기능을 제공하는 '메모'라고 할 수 있습니다. Java에서는 @Override나 @SuppressWarnings와 같은 다양한 애너테이션을 제공합니다. 이번 시간에는 우리가 직접 애너테이션을 만들어서 어떻게 사용할 수 있는지에 대해서 알아보겠습니다. 애너테이션 정의 먼저, 애너테이션을 정의하는 방법은 아래와 같습니다. @interface 애너테이션이름{ 타입 요소이름 (); // 애너테이션 요소 선언 ... } 애너테이션의 요소는 반환값이 있고 매개변수는 없는 추상 메서드의 형태를 가집니다. 상속을 통해서 구현될 필요는 없습..
-Xlint 옵션 자바 프로그램 실행 시 javac -Xlint:deprecation 옵션을 붙여서 컴파일하면 Deprecated 된 메서드나 변수를 사용하였는지 자세한 설명을 확인할 수 있습니다. 이 외에도 -Xlint:unchecked, -Xlint:rawtypes, -Xlint:varargs 등의 옵션을 붙여서 특정 경고에 대해서만 자세한 정보를 확인하거나, 그냥 -Xlint만 붙여서 컴파일하면 경고 메시지의 종류와 그에 대한 자세한 설명을 확인할 수 있습니다. 위와 같은 코드가 있을 때 xlint 옵션으로 컴파일해 보겠습니다. 그럼 아래와 같이 어떤 부분에서 경고 메시지가 발생하는지 자세히 알아볼 수 있습니다.
열거형(enums) 열거형이란? 데이터형의 일종으로, 특정한 값들의 집합을 정의하는 데 사용되며, 이 값들은 열거형 내에서 고유한 상수로 식별됩니다. 열거형 상수를 사용하면 상수의 값이 바뀌어도 기존의 소스를 다시 컴파일하지 않아도 되는 장점이 있습니다. Java에서의 열거형은 '타입에 안전'(컴파일 시 객체의 타입을 체크)한 열거형이기 때문에 두 개의 데이터의 실제 값이 같아도 타입이 다르면 두 데이터는 다르다고 판단합니다. 아래 코드를 보겠습니다. [참고] - '타입 안전이란?' 프로그래밍에서 주로 사용되는 용어로, 변수나 데이터의 타입(데이터 형식)에 대한 안전성을 나타냅니다. 타입에 안전한 프로그램은 변수나 데이터를 올바른 타입으로 사용하고, 타입 불일치로 인한 오류를 방지합니다. 타입에 안전한 언어 예시로는 Jav..
Comparable과 Comparator Comparable과 Comparator 클래스는 모두 컬렉션 프레임워크를 이용하여 데이터를 정렬할 때 어떻게 정렬할 것인가에 대한 기준을 정할 때 사용되는 클래스들입니다. 두 클래스는 비슷한 역할을 수행하는데 두 클래스의 차이를 이번 포스팅에서 알아보도록 하겠습니다. 우선, 각각의 클래스의 내부를 살펴보면 아래와 같습니다. public interface Comparable{ public int compareTo(Object o1); } public interface Comparator{ int compare(Object o1, Object o2); boolean equals(Object obj); } 그럼, 두 인터페이스의 compare 관련 함수는 어떤 점에서 차이가 있을까요? 우선, 매개변수의 개수..
그리디 알고리즘 (Greedy)과 다이나믹 프로그래밍 (DP) 그리디 여러 경우 중 하나를 선택할 때마다 그 순간에 최적인 해를 선택해 나가는 근시안적인 방법이다. 특징 각 선택 시점의 결정이 지역적으로 최적이고, 그 결정들이 모여 만든 답이 최적해라는 보장이 있어야 사용가능하다. 이미 선택한 결정은 번복하지 않기 때문에 대부분의 단순하며 제한적인 문제들에 적용된다. 두 가지 필수 요소 Greedy choice property: 탐욕적 선택 속성 탐욕적 선택이 최적해로 갈 수 있음을 보이고 탐욕적 선택이 항상 안전하다는 것을 확인해야 한다 2. Optimal substructure property: 최적 부분 구조 하나의 선택을 하면 풀어야 할 하나의 하위 문제가 남아야 한다. ==> 원 문제의 최적 해 = 탐욕적 선택 + 하위 문제의 최적 해 DP ‘귀납법’을 만..
다형성(Polymorphism) 다형성이란? 객체지향개념에서 여러 가지 형태를 가질 수 있는 능력을 의미합니다. 즉, 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하는 기능이라고 할 수 있습니다. class Animal { int size, legCount; String type; void makeSound(){} } class Dog extends Animal{ boolean bark; } Animal animal = new Dog(); // 조상 타입의 참조변수로 자손 객체 참조 Dog dog = new Dog(); 위 코드에서, 같은 클래스의 객체를 가르치는 Animal형 변수와 Dog형 변수에는 어떤 차이가 있을까요? animal 변수가 참조할 수 있는 멤버는 Animal 클래스 내 멤버 변수와 메서드 뿐이지만, ..
추상클래스(Abstract)과 인터페이스(Interface) 추상클래스(Abstract) 추상클래스는 미완성된 메서드(추상메서드)를 포함하고 있는 미완성된 클래스라고 할 수 있습니다. 미완성된 클래스로는 인스턴스를 생성할 수 없기 때문에 추상클래스는 상속을 통해서 자손클래스에 의해서 완성이 된 후 사용할 수 있습니다. 추상클래스를 이용하면 그 자체로는 클래스로서의 역할을 하지 못하지만, 새로운 클래스를 작성할 때 일종의 설계도 역할을 하여 조상클래스로서 중요한 의미를 가집니다. 추상클래스 정의 클래스 선언부 앞에 'abstract' 키워드를 붙여서 선언합니다. (접근제어자보다 뒤에 선언해야 합니다. 예를 들어, public abstract class 클래스명으로 선언해야 합니다.) abstract class ExampleAbstract {} 추상클래스도 멤버를 가..
제어자 (static과 final) 제어자는 클래스, 메서드, 혹은 변수 선언부 앞에 붙어서 사용하며 부가적인 의미를 부여하는 역할을 합니다. 제어자는 접근 제어자와 그 외 제어자, 이렇게 크게 2가지로 나눌 수 있습니다. 접근 제어자: 멤버 또는 클래스에 사용되어, 해당하는 멤버 혹은 클래스를 외부에서 접근하지 못하도록 제어하는 역할 public: 접근 제한이 전혀 없어 어디서든 접근가능 protected: 같은 패키지 내, 혹은 다른 패키지의 자손 클래스에서 접근가능 default: 같은 패키지 내에서만 접근가능 private: 같은 클래스 내에서만 접근가능 그 외: static, final, abstract, volatile, transient, native, synchronized, strictfp 위의 여러 가지 제어자들 중, s..

728x90
반응형