목록Java (42)
각진 세상에 둥근 춤을 추자
이벤트 기반 프로그래밍 (Event Driven Programming) 이벤트의 발생에 의해 프로그램의 흐름이 결정되는 방식이다. 이벤트 (Event) 컨트롤러와 사용자 간의 수 많은 상호작용을 말한다. 종류: 사용자의 입력(마우스 드래그, 클릭, 키보드), 센서 입력, 데이터 송수신 등 이벤트 핸들러 (Event Handler, Event Listener) 사용자의 특정 동작에따라 처리되는 이벤트 메서드를 말한다. 클래스로 작성해야 한다. // 이벤트 리스너 등록 메서드 Component.addXXXListener(listener) Componenet.addMouseListener() Componenet.addActionListener() 이벤트 처리 순서 이벤트 발생 ( ex. 마우스, 키보드 입력 ..
컨테이너 배치 관리자 (Container Layout Manager) 각 컨테이너마다 하나의 배치관리자가 존재한다. 컨테이버 배치관리자는 컨테이너에 부착되는 컴포넌트의 위치와 크기를 결정한다. 컨테이너 배치 관리자의 유형은 다음과 같다. FlowLayout 배치관리자: 왼쪽 → 오른쪽 BorderLayout 배치관리자: 동, 서, 남, 북, 중앙 GridLayout 배치관리자: 설정한 크기의 격자로 나눔 CardLayout 배치관리자: 카드를 쌓듯이 컴포넌트를 겹쳐 배치 배치관리자 설정 JPanel p = new JPanel(); p.setLayout(new BorderLayout()); 1. FlowLayout setLayout(new FlowLayout()); [예제1] FlowLayout packa..
프레임 생성 Frame을 만드는 방법은 크게 두 가지가 있다. main() 메서드에서 JFrame 객체를 생성한다. JFrame을 상속받은 클래스를 만들어 Frame을 생성한다. (☆) [1] main() 메서드에서 JFrame 객체 생성 package frame; import javax.swing.JFrame; public class MyFrame1 { public static void main(String[] args) { JFrame f = new JFrame(); f.setSize(300, 300); f.setTitle("First frame"); f.setVisible(true); } } [2] JFrame을 상속받은 클래스를 만들어 Frame을 생성한다. (☆) package frame; im..
GUI (Graphic User Interface)는 사용자가 편리하게 프로그램을 사용하기 위해 화면과 컴포넌트를 지원하는 사용자 인터페이스이다. 컨테이너(Container): 다른 컴포넌트를 포함하는 GUI 컴포넌트 (ex. JDialog, JFrame...) 컴포넌트(Component): 컨테이너에 포함되어 화면에 출력되는 GUI Object (ex. 대부분의 스윙 컴포넌트) 스윙 컴포넌트 예시는 다음과 같다. Swing Frame [스윙 프레임] 모든 스윙 컴포넌트를 담는 최상위 GUI 컨테이너 JFrame을 상속받아 구현 [JFrame의 구성] Frame - 스윙 프로그램의 기본 틀 Menu Bar - 메뉴들이 부착되는 공간 Content Pane - GUI 컴포넌트들이 부착되는 공간
소켓(socket)은 네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미한다. 클라이언트의 포트를 통해 서버에 연결을 요청하면 서버에서 요청을 수락할 수 있다. 서버는 요청을 수락한 후, 새로운 소켓을 만들어 클라이언트와 연결을 생성한다. 이후, 클라이언트와 소켓이 연결되어 데이터를 주고 받는다. 대략적인 클라이언트와 서버의 연결 방법은 다음과 같다. Client. 1. 클라이언트 소켓 생성 및 서버 접속 Socket clientSocket = new Socket("128.12.11", 5550); 2. 네트워크 입출력 스트림 생성 BufferedReader in = new BufferedReader(new InpuetStreamReader(clientSocket.getIn..
배열은 연속된 자료 구조를 구현한다. 하지만 배열은 중간에 자료를 삽입하거나 삭제할 때 나머지 자료를 이동시켜 빈 공간을 만들지 못한다. 이런 점을 개선한 자료 구조를 링크드 리스트(linked list)라고 한다. 링크드 리스트의 각 요소는 다음 요소를 가리키는 주소 값을 가진다. 따라서 물리적인 메모리는 떨어져 있어도 논리적으로 앞뒤 순서가 있을 수 있다. 만약 A → B → D 가 순차적으로 저장된 링크드 리스트가 있다고 가정한다. 리스트의 3번째 위치(B와 D사이)에 'C' 요소를 추가해 본다. 기존의 배열이라면 D를 뒤로 밀어내고 공간을 비워 그 자리에 C를 놓을 것이다. 하지만 링크드 리스트는 서로 가리키고 있는 주소 값만 변경해 주면 된다. B가 가리키던 다음 위치를 C로 변경하고, C가 가..
List 인터페이스 List 인터페이스에는 객체를 순서에 따라 저장하고 유지하는 데 필요한 메서드가 선언되어 있다. 순차 자료 구조의 대표적인 예는 배열이다. (1) ArrayList 클래스 ArrayList를 활용한 MemberArrayList 클래스를 생성한다. 클래스에는 회원을 추가하는 addMember(), 회원을 삭제하는 removeMemeber(), 전체 회원을 출력하는 showAllMember() 메서드가 있다. package collection.arraylist; import java.util.ArrayList; import collection.Member; public class MemberArrayList { // ArrayList 선언 private ArrayList arrayList..
프로그램의 기능을 효과적으로 구현하기 위하여 프로그램을 개발할 때 사용하는 자료를 어떤 구조로 관리할 것인가는 중요하다. 이때 사용하는 것을 자료 구조(data structure)라고 한다. 자료 구조는 프로그램 실행 중에 메모리에 자료를 유지, 관리하기 위해 사용한다. 자바에서는 필요한 자료 구조를 미리 구현하여 java.util 패키지에서 제공하고 있는데, 이를 컬렉션 프레임워크(collection framework)라고 한다. 컬렉션 프레임워크의 전체 구조는 Collection 인터페이스와 Map 인터페이스 기반으로 이루어져 있다. Collection 인터페이스: 하나의 자료를 모아서 관리하는 데 필요한 기능을 제공 Map 인터페이스: 쌍(pair)으로 된 자료를 관리하는 데 유용한 기능을 제공 1..
여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것을 '제네릭(Generic) 프로그래밍'이라고 한다. 제네릭에서는 여러 참조 자료형을 사용해야 하는 부분에 Object가 아닌 'T'와 같이 하나의 문자로 표현한다. 그리고 객체를 생성할 때, T 자리에 구체적인 자료형을 적는다. 즉, Box 클래스 안에 저장되는 구체적인 자료형 대신, T라는 타입 매개 변수로 표시한 것이다. 이렇게 되면 Box로 생성된 객체는 어떤 타입의 데이터든 저장할 수 있다. 제네릭 클래스(generic class)는 타입을 변수로 표시한다. 이것을 타입 매개 변수 (type parameter)라고 하는데 타입 매개 변수는 객체 생성 시에 프로그래머가 결정한다. 3D 프린터 클래스 예제를 통해 제네릭 프로그래밍을 이해해 본다...
자바의 모든 클래스와 인터페이스는 컴파일 되고 나면 class 파일로 생성된다. 예를 들어 a.java 파일이 컴파일 되면 a.class 파일이 생성되고 이 class 파일에는 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등의 정보가 들어 있다. 클래스의 정보를 사용할 경우 클래스가 정확히 어떤 자료형인지 알 필요가 있다. Class 클래스를 선언하고 클래스 정보를 가져오는 방법은 다음과 같이 세 가지가 있다. // 1. Object 클래스의 getClass( ) 메서드 사용하기 String s = new String(); class c = s.getClass(); // 2. 클래스 파일 이름을 Class 변수에 직접 대입하기 Class c = String.Class; // 3. Class.forN..