Java/자바 이론

    [Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )

    [Java] 자바 GUI AWT 사용법 ( 간단한 채팅 프로그램 구현 )

    AWT(Abstract Window Toolkit)는 GUI 프로그램을 제작하기 위해 자바에서 제공하는 라이브러리를 모아놓은 것이다. 운영체제가 제공하는 UI를 사용하기 때문에 플랫폼에 의존적이고 구성요소가 무겁다는 특징 때문에 요즘은 거의 사용하지 않는다고 한다. 하지만 비교적 쉽고, Java Swing이 AWT 기반이기 때문에 간단하게 한번 살펴보는 것도 좋을 듯하다. AWT 계층 및 구성요소 1. Container 프로그램창의 역할을 한다. 이 컨테이너 위에 컴포넌트들이 올라간다. 2. Component 화면을 담당하는 구성요소들이다. ( 버튼, 텍스트 필드 등 ) 3. Event 윈도우 프로그래밍에서 어떤 특정한 행동이 발생 한 그 자체를 의미한다. (ex 버튼 클릭 등) 이벤트 소스 : 이벤트가..

    [Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기

    [Java] 자바 두 개의 큐(Queue)로 스택(Stack) 구현하기

    https://hyunki99.tistory.com/26 이전 글과 비슷하게 2개의 큐로도 스택을 구현할 수 있다. 큐는 많이 사용되는 자료구조 중 하나이다. 먼저 들어온 것이 먼저 나오는 구조로서 FIFO (First In First Out)의 형태를 띈다. 2개의 큐를 활용해서 스택을구현하는 방법을 알아보자. 1. 원리 1. 메인 큐와 임시 큐를 준비한다. 2. 메인 큐에 1개의 원소가 남을 때까지 dequeue하고, 임시 큐에 넣는다. 3. 마지막 남은 1개의 원소는 result 변수에 저장한다. 4. 임시 큐에 남아있는 원소들을 다시 메인 큐로 이동시킨다. 5. result를 리턴한다. 2. 예제코드 import java.util.LinkedList; import java.util.Queue; c..

    [Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기

    [Java] 자바 두 개의 스택(Stack)으로 큐(Queue) 구현하기

    스택은 많이 사용되는 자료구조 중 하나이다. 나중에 들어온 것이 먼저 나오는 구조로서 LIFO (Last In First Out)의 형태를 띈다. 2개의 스택을 활용해서 큐를 구현하는 방법을 알아보자. 1. 원리 스택을 하나 사용하면 LIFO지만, 2개의 스택을 사용해서 FIFO(First in First Out) 형태인 큐 자료구조를 구현할 수 있다. 스택과 큐에서 자료가 어떤 방식으로 들어오고(push) 나가는지(pop)만 이해하면 어렵지 않다. 스택 : 1, 2, 3을 push하고 pop하면 3, 2, 1 순으로 나오게 된다. 큐 : 1, 2, 3을 enqueue하고 dequeue하면 1, 2, 3 순으로 나오게 된다. 즉, 스택과 큐는 서로 역순(reverse)이다. 나오는 자료를 역순 뒤집어 주..

    [Java] 자바 객체 정렬 Comparable과 Comparator의 이해

    [Java] 자바 객체 정렬 Comparable과 Comparator의 이해

    자바를 사용하다보면 객체를 정렬하고 싶은 경우가 많이 생긴다. 하지만 객체 안에 어떤 데이터를 기준으로 정렬할지 컴퓨터는 알 수 없다. 이 정렬 기준을 정해주는 것이 Comparable과 Comparator다. 즉, 객체를 비교할 수 있도록 해준다. Comparable & Comparator ( API 문서 ) Comparable과 Comparator는 모두 인터페이스다. 즉, 사용하기 위해서는 인터페이스 내에 있는 추상 메서드를 반드시 오버라이딩 해야 한다. 메서드를 확인하기 위해서 공식 API 문서를 참고하자. Comparable (Java Platform SE 8 ) This interface imposes a total ordering on the objects of each class that ..

    [Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱)

    [Java] 자바 제네릭(Generic)이란? (Feat. 오토박싱)

    제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식이다. 다형성의 특징을 가지고 있고, 결국 편하려고 만들어졌다. 제네릭의 필요성 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정한다. (강한 타입체크) 1. 잘못된 타입이 들어오는 것을 컴파일 단계에서 방지가 가능하다. 2. 실행 시 타입 검사나 타입 변환과 같은 번거로운 작업을 생략할 수 있게 된다. //제네릭 X ArrayList list = new ArrayList(); list.add("연필"); String temp = (String) list.get(0); //타입변환이 필요함 //제네릭 O ArrayL..

    [Java] 자바 컬렉션(Collection) 프레임워크란?

    [Java] 자바 컬렉션(Collection) 프레임워크란?

    컬렉션은 동일한 타입을 묶어 관리하는 자료구조를 말한다. 배열과 다른 점은 데이터의 저장 용량을 동적으로 관리 할 수 있다. 컬렉션 프레임워크란 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다. (인터페이스를 사용하여 구현되었다.) 주요 클래스 & 인터페이스 주요 인터페이스로 List, Set, Map가 존재한다. 이 인터페이스를 상속받아 구현해 놓은 구현 클래스도 이미 만들어져 있다. 자주 사용되는 자료구조인 Stack, Queue도 구현클래스가 존재한다. 를 보면 알 수 있듯이 모든 클래스가 제네릭이다. 인터페이스와 이를 구현한 클래스가 잘 만들어져 있기 때문에 필요에 따라 사용하고 싶은 자료 구조를 가져다 쓰기만 하면 되기 때문에 편리하다. 모든 내..

    [Java] 자바 쓰레드(Thread) & 동기화

    [Java] 자바 쓰레드(Thread) & 동기화

    실행하기 위해 메모리에 로딩된 프로그램을 프로세스라 하고, 프로세스 내부에 쓰레드가 존재한다. 쓰레드는 'CPU를 사용하는 최소 단위'라고 할 수 있다. 하나의 프로세스에서 여러 개의 쓰레드가 동작하는 것을 '멀티 쓰레드'라고 한다. 쓰레드의 생성 및 실행방법 2가지 쓰레드에서 작업할 내용은 run() 메서드 안에 작성한다. 이후 Thread 클래스의 생성자를 이용해 객체를 생성한다. 마지막으로 Thread 객체의 start() 메서드를 호출해 실행한다. start() = 새로운 쓰레드 생성 / 추가하기 위한 모든 준비 + 새로운 쓰레드 위에 run() 실행 방법 1. Thread 클래스 상속받아 run() 메서드 오버라이딩 class MyThread extends Thread{ @Override pub..

    [Java] 자바 내부 클래스 4종류 (Inner Class)

    내부 클래스는 하나의 클래스 내부에 선언된 또 다른 클래스를 의미한다. 내부 클래스에서 외부 클래스(Outer Class) 멤버에 접근하기 위해 사용한다. 선언된 위치에 따라서 4가지 형태가 존재한다. ( 항상 외부 객체 생성 -> 내부 객체 생성 ) 내부 클래스의 장점 1. 내부 클래스는 외부 클래스의 모든 멤버를 자유롭게 사용할 수 있다. = 코드가 간결해지고 편리하다. 2. 외부에 불필요한 클래스를 감추어서 코드의 복잡성을 줄일 수 있다. (캡슐화) 내부 클래스의 종류 1. 멤버 이너 클래스 (member inner class) 클래스 내부에서 멤버 변수처럼 선언된 이너 클래스다. 인스턴스 멤버 클래스와 정적 멤버 클래스가 존재한다. ( 이너 클래스에서 필드나 메서드의 이름이 동일한 아우터 클래스 ..