본문 바로가기

728x90
반응형

Java

(17)
[Java] 스레드(Thread), 모니터(Monitor), Runnable 인터페이스 스레드 (Thread) 스레드는 프로그램의 실행 흐름으로 프로세스의 내부에 존재한다. 프로세스에 비해 필요 자원이 적으며 같은 프로세스 내의 스레드 간 자원을 공유한다, Java는 멀티태스킹을 위해 멀티스레딩 방식을 사용한다. 이를 통해 유휴시간을 최소화하여 CPU의 사용률을 높일 수 있게 한다.         모니터 (Monitor) Java는 Monitor mechanism을 이용한다. Monitor란 스레드 간 상호배제(mutual exclusion)를 구현하는 동기화 구조이다. 스레드가 오브젝트 조작 시 모니터 확보를 필요로 한다. 이를 통해 특정 스레드가 모니터를 가지면 오브젝트에 락을 설정하여 다른 스레드가 해당 오브젝트에 접근할 수 없게 한다.     Main thread Main threa..
[Java] 예외 처리 (검사형 예외, 비검사형 예외) 예외 Java에서 모든 예외는 Throwable 클래스를 상속받는다. Throwable 클래스 아래에는 Error 클래스와 Exception 클래스가 있다. Error는 개발자가 처리할 수 없는 오류를 말하며 Exception은 개발자가 처리할 수 있는 오류를 말한다. Exception은 일반적인 예외와 RuntimeException의 상속을 받는 실행 예외로 나뉜다.         비검사형 예외 (실행 예외) 비검사형 예외는 예외 처리를 하지 않아도 컴파일이 가능한 예외이다. 대표적인 비검사형 예외 예외발생 이유ArithmeticException0으로 나누기와 같은 부적절한 산술 연산의 수행IllegalArgumentException메서드에 부적절한 인수를 전달IndexOutOfBoundsExcepti..
[Java] Iterator 인터페이스 Iterator interface Iterator interface는 컬렉션 원소에 접근하기 위한 반복자를 제공한다. 그러나 키-값 구조의 Map 컬렉션은 반복자를 제공하지 않는다. Iterator interface에는 유용한 다음과 같은 메서드가 존재한다. boolean hasNext()다음 원소의 존재 여부를 반환한다.E next()다음 원소를 반환한다.default void remove()마지막에 순회한 컬렉션의 원소를 삭제한다.   예시로 아래 코드를 확인해 보겠다. import java.util.*;public class App { public static void main(String[] args) throws Exception { Collection list = Arrays..
[Java] 컬렉션 프레임워크 (Collection Framework), List 인터페이스 (List interface) 컬렉션 (Collection) 데이터를 저장하고 관리하는 Java의 가변 크기의 오브젝트 컨테이너를 컬렉션이라고 한다. 리스트, 트리, 해쉬, 셋, 큐, 맵 등의 자료구조가 여기에 포함된다.    인터페이스 (Interface) 컬렉션 프레임워크는 인터페이스와 클래스로 구성되어 있다. 인터페이스는 클래스가 어떤 식으로 구현되어야 하는지에 대해서 클래스의 동작 규칙을 정의하는 역할을 한다.     컬렉션 프레임워크 컬렉션 프레임워크 인터페이스의 하위 인터페이스로는 List, Queue, Set 인터페이스가  있다. 컬렉션 프레임워크에는 다음과 같은 메서드들이 정의되어 있으며 이는 컬렉션 프레임워크의 상속을 받는 인터페이스에서만 사용이 가능하다. boolean add(E e)객체를 맨 끝에 추가한다.void..
[Java] package, import 패키지 (package) 패키지는 하나의 프로젝트에서 여러 개의 소스파일을 사용할 때 서로 다른 소스파일을 구분하기 위하여 사용한다.  C++이나 C#에서의 namespace와 유사한 역할을 한다고 생각하면 된다. 만약 패키지를 명시하지 않으면 Java의 기본 패키지를 사용하고 있는 것이다. 패키지는 소스코드당 한 번만 선언할 수 있으며 소스코드의 가장 첫 번째 줄에 위치해야 한다. 예를 들어 아래 코드처럼 작성된 두 개의 소스파일이 있다고 해보자. package test1;public class MyClass { } package test2;public class MyClass { }  이제 해당 프로젝트에서는 import를 통해서 같은 이름의 MyClass를 사용하는 것이 가능하다.      impo..
[Java] 오브젝트 클래스 (Object Class) 오브젝트 클래스 (Object Class) 모든 Object Class는 Java의 최상위 부모클래스이다. 따라서 Java의 모든 Class는 Object Class를 직간접적으로 상속받는다.    오브젝트 클래스의 역할 Java의 모든 클래스는 오브젝트 클래스에서 파생되므로 모든 클래스에서 오브젝트 클래스의 메서드를 사용할 수 있다. 즉, 오브젝트 클래스는 Java에 기본적인 메서드를 제공하는 역할을 한다.     오브젝트 클래스 메서드 - clone()protected Object clone() throws CloneNotSupportedException clone() 메서드는 현재 객체의 복사본을 생성하는 역할을 한다. 복사는 얕은 복사로 진행되기 때문에 깊은 복사를 사용하고 싶다면 오버라이딩을 해..
[Java] final final 키워드 final 키워드를 사용하면 기본적으로 확장 불가능하다는 특성을 갖고 있다. final 키워드는 변수, 메서드, 클래스 등에 사용할 수 있다.    - final 변수final 키워드를 변수에 사용하게 되면 마치 const 키워드처럼 초기화 이후 변수의 값을 변경할 수 없게 된다. 그러나 final은 const와 다른 점이 있는데 참조형 변수(객체)에 사용할 경우 내부의 값은 변경할 수 있다. 이때 final은 참조형 변수의 주소값을 변경할 수 없다는 의미로 사용된다.    - final 매개변수매개변수에 final을 사용하게 되면 해당 매개변수는 함수 내부에서 값의 변경이 불가능하다. 이는 const를 사용하는 것과 매우 유사하다.    - final 메서드final 키워드를 메서드에..
[Java] 추상 클래스, 추상 메서드 (abstract) 추상 클래스 (abstract class) abstract 키워드를 사용하여 클래스를 선언하면 해당 클래스로는 객체를 생성하는 것이 불가능하다. abstract을 통해서 해당 단계에서 구현할 내용이 없을 때 구현 없이 클래스의 구조만을 선언하는 것이 가능하다. 추상 클래스는 해당 클래스가 아직 미완성이거나 상속을 위해서 빈 클래스가 필요할 때 사용된다. abstract class Shape { // 빈 추상 클래스}        추상 메서드 (abstract method) 추상 메서드는 추상 클래스안에 선언할 수 있는 메서드로 정의가 없고 선언만 되어 있다. 추상 메서드를 포함한 클래스는 하위 클래스에서 반드시 이 추상 메서드를 오버라이딩(정의)해주어야 한다. abstract class Animal..

728x90
반응형