Java: 248개의 글
쓰레드 기본 1. 프로세스와 쓰레드프로세스란 간단히 말해서 '실행 중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 된다. 프로그램 ---------------실행---------------> 프로세스 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있으며 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다.그래서 모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재하며, 둘 이상의 쓰레드를 가진 프로세스를 멀티쓰레드 프로세스라고 한다.(쓰레드를 프로세스라는 작업공간(공장)에서 작업을 처리하는 일꾼으로 생각하자) 싱글쓰레드 프로세스 = 자원 + thread멀티쓰레드 프로세스 = 자원 + th..
직렬화 컴퓨터에 저장했다가 다음에 다시 꺼내 쓸 수는 없을지 또는 네트웍을 통해 컴퓨터 간에 서로 객체를 주고 받을 수는 없을까라고 고민해 본 적이 있는가? 과연 이러한 일들이 가능할까?가능하다. 이러한 것을 직렬화가 처리해준다. 1. 직렬화란 직렬화(스트림으로)란 객체를 데이터 스트림으로 만드는 것을 뜻한다. 즉, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다.반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(객체로)라고 한다.객체 스트림은 프로그램 메모리상에 존재하는 객체를 직접 입출력해 줄 수 있는 스트림으로 현재 상태를 보존하기 위한 영속성을 지원할 수 있다.자바에서 객체 안에 저장되어 있는 내용을 파일로 저장하거나 네트워크를 통하여 다른 곳으로..
File 클래스 자바에서는 File 클래스를 통해서 파일과 디렉터리를 다룰 수 있도록 하고 있다. 그래서 File 인스턴스는 파일 일 수도 있고 디렉터리 일 수도 있다. 1. File 클래스 API- 경로와 관련된 File의 멤버변수 멤버변수 설명 static String pathSeparator OS에서 사용하는 경로 구분자. 윈도우";", 유닉스":" static char pathSeparatorChar OS에서 사용하는 경로 구분자. 윈도우';', 유닉스':' static String separator OS에서 사용하는 이름 구분자. 윈도우"\", 유닉스"/" static char separatorChar OS에서 사용하는 이름 구분자. 윈도우'\', 유닉스'/' import java.io.*; c..
문자 기반 스트림 1. 문자 기반 스트림문자데이터를 다루는 데 사용된다는 것을 제외하고는 바이트기반 스트림과 문자기반 스트림의 사용방법은 거의 같다.문자기반 스트림이라는 것이 단순히 2byte로 스트림을 처리하는 것만을 의미하지 않는다는 것이다. (1) FileReader와 FileWriter FileReader와 FileWriter는 파일로부터 텍스트 데이터를 읽고, 파일에 쓰는데 사용된다. 사용방법은 FileInputStream과 FileOutputStream과 다르지 않다.import java.io.*; class FileReaderEx1 {public static void main(String args[]) {try {String fileName = "test.txt";FileInputStream..
바이트 기반의 스트림 1. 바이트 기반 스트림(1) InputStream과 OutputStreamInputStream과 OutputStream은 모든 바이트기반의 스트림의 조상이며 같은 메서드가 선언되어 있다.cp.)void close(): 스트림을 닫음으로써 사용하고 있던 자원을 반환한다.abstract int read(): 1byte를 읽어온다.(0~255 사이의 값), 더 이상 읽어 올 데이터가 없으면 -1을 반환한다. abstract메서드라서 InputStream의 자손들은 자신의 상황에 알맞게 구현해야 한다.int read(byte[] b): 배열 b의 크기만큼 읽어서 배열을 채우고 읽어 온 데이터의 수를 반환한다. 반환하는 값은 항상 배열의 크기보다 작거나 같다.int read(byte[] b..
파일I/O 개요 1. 입출력이란?입출력이란 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다.예를 들면 키보드로부터 데이터를 입력받는다든가 System.out.println()을 이용해서 화면에 출력한다던가 하는 것이 가장 기본적인 입출력의 예이다. 2. 스트림자바에서 입출력을 수행하려면, 즉 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림이라 한다.스트림은 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고 받는다. 큐와 같은 FIFO(First In First Out)구조..
제네릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 즉, 클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때 확정하는 것을 제네릭이라 한다.객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.ArrayList와 같은 컬렉션 클래스는 다양한 종류의 객체를 담을 수 있긴 하지만 보통 한 종류의 객체를 담는 경우가 더 많다. 그런데도 꺼낼 때 마다 타입체크를 하고 형변환을 하는 것은 아무래도 불편할 수 밖에 없다. 위의 그림은 아래의 코드를 간략화한 것이다. class Person{ public T info;// p1 일시 데이터 타입은 String이된다.(인스턴스 생성시 String ..
컬렉션 프레임워크 인터페이스 특 징 List순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.--> 데이터를 add하면 앞에서 부터 순차적(순서대로)으로 데이터가 들어간다. 그래서 각각의 저장되어 있는 공간들은 고유한 index를 갖는다. ex.) 대기자 명단구현 클래스: ArrayList, LinkedList, Stack, Vector등 Set순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다.--> 집합이다. 데이터가 순서와는 상관없이 add된다. 중복되지 않는다.ex.) 양의 정수 집합, 소수의 집합구현 클래스: HashSet, TreeSet등 Map키와 값의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값을 중복을 허용한다.ex.) 우..
staticstatic이라는 의미는 ‘정적인, 움직이지 않는다.’는 뜻이다. 메모리에서 고정되기 때문에 붙은 이름이지만, 실제 소스에서 static을 사용한다는 의미는 모든 객체가 ‘공유’한다는 의미이다.cf.) 객체지향이라는 패러다임이란 데이터와 기능(로직, 메소드)을 가진 객체들의 커뮤니케이션으로 어떤 작업을 완료하는 것을 의미한다. cf.) 객체마다 데이터를 가져도 불편한 때도 있다예를 들어 여러분이 어떤 쇼핑몰을 운영한다고 가정해보자. 여러분의 시스템에서 발생하는 매출 현황은 비단 여러분뿐 아니라 여러분의 회사의 모든 직원이 알아야 한다.이 비유는 객체지향 프로그래밍에서도 마찬가지로 적용할 수 있다.1 모든 객체가 동일한 데이터를 참고해야 할 필요가 있다.2 모든 객체는 데이터에 영향을 줄 수 있..
클래스 메서드와 인스턴스 메서드 클래스메서드도 클래스변수처럼, 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능하다.클래스는 데이터(변수)와 데이터에 관련된 메서드의 집합이라고 할 수 있다. 같은 클래스 내에 있는 메서드와 멤버변수는 아주 밀접한 관계가 있다.인스턴스메서드는 인스턴스변수와 관련된 작업을 하는, 즉, 메서드의 작업을 수행하는데 인스턴스변수를 필요로 하는 메서드이다. 그래서 인스턴스변수는 인스턴스(객체)를 생성해야만 만들어지므로 인스턴스변수를 사용하는 인스턴스메서드 역시 인스턴스를 생성해야만 호출할 수 있는 것이다. 반면에 메서드 중에서 인스턴스와 관계없는(인스턴스변수나 인스턴스메서드를 사용하지 않는) 메서드를 클래스메서드로 정의한다.cf.) 멤버변수는 인..