본문 바로가기

JAVA 스터디

(11)
[JAVA] I/O (Input/Output) I/O란 Input/Output의 줄인 말인 I/O은 입력과 출력을 의미합니다. 예를 들어, 우리가 컴퓨터에게 데이터를 입력하기 위해 키보드를 입력하는 것을 Input이라 할 수 있고 입력받은 데이터를 적절하게 처리하여 화면에 출력하는 것을 Output이라 할 수 있습니다. 자바에서 콘솔 창에 데이터를 출력할 때 System.out.println()을 주로 사용했을 것입니다. 사실 이것은 내부적으로 스트림을 활용한 것입니다. System.out.println()의 경우 매개변수로 PrintStream(데이터를 적절한 문자로 출력하는 문자 기반 스트림)을 받습니다. 그리고 Scanner 클래스 생성 시에 Scanner.in을 받는데, 이게 InputStream 입니다. 이러한 동작을 할 수 있도록 도와주는..
[JAVA] 람다식(Lambda) 람다식 람다식이란 하나의 메소드를 간략하게 표현하는 것을 말합니다. // 일반 메소드 int max(int x, int y) { return x > y ? x : y; } // 람다식 (x, y) -> x > y ? x : y; 위의 예제처럼 메소드를 람다식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 이용할 수 있습니다. 자바에서는 클래스의 선언과 동시에 객체를 생성하게 되므로, 단 하나의 객체만을 생성할 수 있는 클래스를 익명 클래스라고 합니다. 따라서 자바에서 람다식은 익명 클래스와 같다고 할 수 있습니다. // 람다 표현식 (x, y) -> x y ..
[JAVA] 어노테이션(Annotation) 어노테이션(Annotatio)이란 어노테이션은 사전적 의미로 주석을 뜻합니다. 자바에서 사용될 때의 어노테이션은 코드 사이에서 주석처럼 쓰여 특별한 의미, 기능을 수행하는 기술입니다. 즉, 어노테이션이란 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종입니다. 보통 @ 기호를 앞에 붙여서 사용하고, JDK 1.5 버전 이상에서 사용 가능합니다. 메타데이터(meta data) 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해주는 데이터 어노테이션은 아래와 같은 용도로 사용됩니다. 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공합니다. 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공합니다. 실행 시(run time) 특정 기능을 실행하도록 정보를 제공합니..
[JAVA] Enum(열거형) 열거 타입(Enum Type)의 등장 자바의 열거 타입(Enum Type)은 자바 1.5부터 등장하기 시작했습니다. Enum이 등장하기 이전에는 상수값 관리를 정수 열거 패턴(int enum pattern)으로 했습니다. 정수 열거 패턴은 static final로 불변의 상수값을 만들어 사용하는 것입니다. 네이밍 규칙은 대문자로 하며, 변수명을 의미 있고 다른 상수들과 구분 지을 수 있도록 지어야 합니다. Enum은 이미 선언된 Enum 상수 외의 객체는 사용할 수 없으며, toString 메소드를 호출하면 인쇄 가능 문자열로 쉽게 변환할 수 있습니다. int enum pattern 아래는 정수 열거 패턴의 예시입니다. public class Frutis { private static final int ..
[JAVA] 멀티쓰레드 프로그래밍(Multi Thread Programming) 프로세스(process) 프로세스란 단순히 실행 중인 프로그램(program)을 말합니다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 동작하는 것을 말합니다. 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 쓰레드로 구성됩니다. 쓰레드(thread) 쓰레드란 프로세스 내에서 실질적으로 작업을 수행하는 주체를 말합니다. 모든 프로세스에는 한 개 이상의 쓰레드가 존재합니다. 이때 두 개 이상의 쓰레드를 가지는 프로세스를 멀티 쓰레드 프로세스(multi-htreaded process)라고 합니다. 예를 들어 메신저 프로세스 같은 경우 채팅 기능을 제공하면서 동시에 파일 업로드 기능을 수행할 수 있습니다. 이처럼 한 프로세스에서 멀티 태스킹이 가능한 이유는 멀티 쓰레..
[JAVA] 예외처리(Exception) 예외(Exception) 예외란 "exceptional event"의 약어입니다. 예외는 프로그램 실행 중에 발생하는 프로그램 실행의 일반적인 흐름을 방해하는 이벤트입니다. 메소드 내부에서 에러가 발생하면 메서드는 객체를 만들고 런타임 시스템에 전달합니다. 해당 객체는 "예외 객체"라고 불리며 객체에는 오류가 발생했을 때 프로그램 상태를 포함하여 오류에 대한 정보와 유형에 대한 정보를 포함하고 있습니다. 예외 객체를 생성하여 런타임 시스템에 전달하는 것을 "예외 발생(throwing an exception)"이라고 합니다. 특정 메소드에서 예외가(를) 발생되면(던지면), 프로그램의 동작이 멈추게 되므로 반드시 해결해야 합니다. 이를 위해서 제일 먼저 해야 하는 일은 발생한 예외를 해결할 수 있는 특정 메..
[JAVA] 인터페이스(Interface) 다중 상속(multiple inheritance) 자식 클래스가 다양한 부모로부터 클래스를 상속받는 것을 다중 상속이라고 합니다. 그러나 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있습니다. 다음은 다중 상속의 문제점에 대한 설명입니다. 화살표가 상속 관계를 나타낼 때, 'ComboDrive'는 'CDBurner'와 'DVDBurner'를 상속하고 있습니다. 상속에 의해서 ComboDrive는 burn() 메소드를 호출할 수 있습니다. 그러나 어떤 부모 클래스의 burn() 메소드를 호출해야 되는지 명확하지 않은 상황입니다. 따라서 자바는 다중 상속을 지원하지 않습니다. 그럼에도 불구하고, 다중 상속은 다양한 동작을 수행할 수 있다는 장점이 있기 때문에 매우 효율적입니다...
[JAVA] 패키지(package), 클래스패스(class path), 접근지시자(Access Modifier) 패키지(package) 패키지는 클래스와 인터페이스들을 하나로 묶는 단위를 말합니다. 서로 관련이 있는 클래스나 인터페이스를 함께 묶어서 파일을 효율적으로 관리하는 것입니다. 더불어, 공동작업을 할 때 서로 작업한 클래스 사이에서 발생할 수 있는 이름 충돌 문제도 패키지를 이용하면 해결할 수 있습니다. 자바에서 패키지는 물리적으로 하나의 디렉터리를 의미합니다. 따라서 하나의 패키지에 속한 클래스나 인터페이스 파일은 모두 해당 패키지 이름의 디렉터리에 포함됩니다. 이런 패키지는 다른 패키지를 포함할 수 있으며, 이때 디렉터리는 점(.)으로 구분되는 계층 구조를 가집니다. 자바에서 기본 클래스들은 java.lang에 있고, 읽기 및 쓰기전용 클래스(입력, 출력)는 java.io에 있습니다. 다음은 가장 많이..