본문 바로가기

728x90

Java

(28)
Thread 구현과 실행 (Runnable vs Thread) 이번 포스팅은 Thread를 구현하는 방법 2가지와 Thread의 start()와 run() 메서드의 차이점에 대하여 포스팅해 보았습니다. Thread 생성 1. Thread 클래스 상속 선언 class Thread_1 extends Thread{ @Override public void run(){ for(int i=0;i
자바의 애너테이션(Annotation) 애너테이션이란, 주석처럼 프로그래밍 언어에 영향을 미치지는 않으면서도 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킴으로써 다른 프로그램에게 유용한 정보를 제공할 수 있는 기능을 제공하는 '메모'라고 할 수 있습니다. 이번 포스팅은 자바에서 제공하는 애너테이션에 대해서 알아보겠습니다. 자바에서 기본적으로 제공하는 애너테이션 중 대표적인 종류는 아래와 같습니다. 애너테이션 설명 @Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알려줍니다. @Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙입니다. @SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않도록 해줍니다. @FunctionalInterface 함수형 인터페이스임을 나타냅니다. 그리고 자바에서..
자바에서 애너테이션(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 관련 함수는 어떤 점에서 차이가 있을까요? 우선, 매개변수의 개수..
다형성(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 {} 추상클래스도 멤버를 가..

728x90
반응형