본문 바로가기

전체 글

(50)
스레드_멀티 스레드 1. 프로세스와 스레드 프로세스는 운영체제에서 실행 중인 하나의 애플리케이션을 말한다. 사용자가 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션의 코드를 실행하는데 이것을 프로세스라고 한다. 그리고 스레드는 프로세스 내부에서의 코드의 실행 흐름을 말한다. 스레드의 사전적 의미는 한가닥 실이다. 즉 프로그래밍에서 스레드는 한 가지 작업을 위해 순차적으로 실행할 코드를 한가닥 실처럼 길게 늘어 놓았다고하여 유래된 명칭이다. 프로세스와 스레드는 멀티태스킹이 가능하다. 멀티 태스킹은 두 가지 이상의 작업을 동시에 처리하는 것을 말한다. 프로세스의 경우 실행되는 프로세스 마다 필요한 메모리를 할당해주고 병렬로 실행시킨다. 이것이 멀티 프로세스이다. 스레드의 경우에도 멀티태스킹이 ..
예외 처리_예외 처리 1. 예외 처리 코드 일반 예외와 실행 예외를 처리하기 위해 예외 처리 코드를 작성해야한다. 일반 예외의 경우, 컴파일러가 강제적으로 개발자에게 예외 처리 코드를 작성하도록 요구한다. 그러나 실행 예외의 경우, 컴파일러가 예최 처리 코드를 강제하지 않으며 개발자의 경험을 통해 예외 처리 코드를 작성해야한다. 2. try-catch-final 블록 try-catch-final 블록은 생성자 또는 메소드 내부에 작성되어 일반 예외와 실행 예외를 처리하기 위해 사용된다. try-catch-final 블록의 형태와 실행 과정은 아래와 같다. try { 예외 발생 가능 코드 } catch(예외클래스 e) { 예외 처리 코드 } final { 항상 실행 코드 } try 블록에는 예외가 발생할 수 있는 코드가 작성된..
예외 처리_예외 클래스 1. 예외 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 발생하는 응용 프래그램의 실행 오류를 통상적으로 에러라 칭한다. 예외는 이러한 에러 이외에 프로그램 자체에서 발생하는 오류를 말한다. 예외를 다시 정의하자면, 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램의 오류를 말한다. 발생할 경우 프로그램이 종료된다는 점에서 에러와 예외는 유사하지만, 예외의 경우 예외 처리를 통해 프로그램을 종료하지 않고 정상적으로 유지할 수 있다. 자바는 예외가 발생할 확률이 높은 코드를 컴파일 할때 자동적으로 예외 처리 유무를 확인한다. 확인 결과 예외 처리가 되어있지 않다면, 컴파일 되지 않는다. 하지만 모든 예외에 대해서 예외 처리 유무를 확인하는 것은 아니며, 예외의 종류에 따라 다르다. ..
중첩 클래스 및 중첩 인터페이스_익명 객체 1. 익명 객체 익명(anonymous) 객체는 이름이 없는 객체를 말한다. 익명 객체를 생성하기 위한 조건이 있다. 익명 객체는 부모 클래스의 자식 객체 또는 인터페이스의 구현 객체여야한다. 일반적인 상황에서는 자식 클래스, 구현 클래스의 이름을 선언하고 객체를 생성한다. class 자식클래스 extends 부모클래스 { ... } //상속 부모클래스 변수 = new 자식클래스(); //상속 class 구현클래스 implements 인터페이스 { ... } //구현 인터페이스 변수 = new 구현클래스(); //구현 그러나 익명 객체에서는 자식 클래스 또는 구현 클래스의 이름이 선언되지 않는다. 그리고 아래의 코드를 통해 자식 및 구현 객체를 생성하고 참조하게 된다. 부모클래스 변수 = new 부모클래..
중첩 클래스 및 중첩 인터페이스 1. 중첩 클래스 중첩 클래스란 클래스 내부에 선언된 클래스를 말한다. 클래스는 여러 클래스와 관계를 갖게 되는 경우도 있지만, 특정 클래스와의 관계만 맺는 경우도 있다. 전자의 경우, 독립적으로 클래스를 선언하는 것이 사용에 유용하다. 그러나 후자의 경우, 관계를 맺는 클래스의 내부에 선언하는 것이 두 클래스 간의 접근에 유용하고 코드의 복잡성을 감소시킬 수 있다는 장점이 있다. 중첩 클래스는 선언되는 위치에 따라 멤버 클래스, 로컬 클래스로 분류된다. 멤버 클래스는 외부 클래스의 멤버로써 선언되는 중첩 클래스를 말한다. 로컬 클래스는 생성자 또는 메소드의 내부에 선언되는 중첩 클래스를 말한다. 2. 멤버 클래스 멤버 클래스는 한번 더 분류될 수 있다. 정적 멤버와 인스턴스 멤버 분류를 가능하게 하는 ..
인터페이스_타입 변환과 다형성 1. 인터페이스의 다형성 상속과 마찬가지로 인터페이스 또한 다형성을 구현하기 위한 메소드 재정의, 타입 변환이 제공되므로 다형성을 구현하는데 많이 사용된다. 상속은 하위 클래스를 만들고, 인터페이스는 구현 클래스를 만드는 기술이라는 개념 상의 차이는 있지만, 다형성을 구현하는 방법은 매우 유사하다. 2. 자동 타입 변환 부모 클래스와 자식 클래스의 자동 타입 변환 처럼, 인터페이스 타입과 구현 객체의 자동 타입 변환이 가능하다. 또한 어떤 특정 구현 클래스의 자식 클래스가 존재한다면, 그 자식 클래스는 인터페이스 타입으로 자동 변환 가능하다. 3. 필드의 다형성 필드의 타입을 인터페이스로 선언하므로써, 필드의 다형성을 사용할 수 있다. 아래의 예제 코드는 Tire인터페이스와 HankookTire, Kum..
인터페이스_인터페이스 1. 인터페이스 인터페이스는 객체의 사용 방법을 정의한 타입이며, 개발 코드와 객체가 서로 통신하는 매개체 역할을 한다. 만약 개발 코드가 인터페이스의 메소드를 호출하면, 인터페이스는 객체의 메소드를 호출한다. 이 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없으며, 인터페이스에 대해서만 알고 있으면 된다. 인터페이스를 사용하는 이유는 개발의 효율성 때문이다. 인터페이스를 사용하면 개발 코드를 수정하지 않고 사용하는 객체를 변경할 수 있다. 인터페이스는 여러 객체들을 사용할 수 있으므로, 어떤 객체를 사용하느냐에 따라 실행 내용이 달라질 수 있다. 따라서 개발 코드를 변경하지 않고 실행 내용을 다양화할 수 있다는 장점을 갖게 된다. 2. 인터페이스 선언 인터페이스는 .java 형태로 소스 파일이 작..
상속_추상 클래스 1. 실체 클래스와 추상 클래스 실체 클래스는 그 클래스를 통해 객체를 직접 생성할 수 있는 클래스를 말한다. 추상 클래스란 여러 실체 클래스의 공통적인 특성(필드, 메소드)을 추출하여 선언해놓은 클래스를 말한다. 실체 클래스는 추상 클래스를 상속하여 추상 클래스에 선언된 공통적인 특성을 물려받고, 각자 추가적인 특성을 가질 수 있다. 추상 클래스를 사용하는 목적은 크게 실체 클래스들의 통일성 확보, 코딩의 효율성으로 볼 수 있다. 만약 여러 사람이 추상 클래스 없이 실체 클래스를 작성한다고 가정해보자. 각 실체 클래스들이 다루는 데이터와 기능이 동일하다고 해도, 실체 클래스마다 멤버의 명칭, 사용방법이 다르다면 기능을 구현함에 있어 혼란과 오류를 초래할 수 있다. 또한 추상 클래스에 공통적인 특성을 미..