SlideShare une entreprise Scribd logo
1  sur  136
Télécharger pour lire hors ligne
현업개발자의 실무 멘토링

JAVA 입문
mhb8436@gmail.com

13년 10월 25일 금요일
목차
• 자바 시작하기
• 자바의 자료형
• 자바의 연산자
• 자바의 제어문
• 기본적인 객체지향
이야기

13년 10월 25일 금요일

• 클래스와 객체
• 인터페이스와 상속
• String과 Number
• Date와 Format
• 정규식과 플랫폼 환
경
목차(계속)
• 제네릭과

어노테이

션

• 자바 콜렉션 프레임
워크

• 예외 처리 클래스
• 쓰레드
13년 10월 25일 금요일

• 기본 IO와 파일IO
• 네트워크 다루기
• JDBC
• 스윙 프로그래밍
• XML 다루기
자바 시작하기

13년 10월 25일 금요일
자바 이야기
• 1991년 제임스 고슬링이 자바 프로젝트를 시
작 자바 프로젝트의 결과물로서 1995년 자바
1.0 탄생, Write Once, Run Anywhere

• Java SE, Java EE, Java ME
• Java 프로그램 실행 방법

13년 10월 25일 금요일
자바로 할 수 있는 일

•웹

13년 10월 25일 금요일

• Android

• 기타
자바 설치 및 프로그램 작성
• JDK 설치
• 자바 환경설정 방법
• HelloWorld.java 작성
• 이클립스를 이용한 HelloWorld.java 작성

13년 10월 25일 금요일
자바의 자료형

13년 10월 25일 금요일
변수와 자료형
• 변수는 값을 공간
• 변수를 선언하는 방법 : 변수타입 변수명
예) int count, boolean check
변수명에 사용가능한 문자 : 문자, 숫자, $,
_ 실무에서는 문자와 숫자를 주로 사용
예약어는 사용 금지 : class, boolean, byte,
public, private, int ....
13년 10월 25일 금요일
기본 자료형(Primitive Type)
• 숫자 자료형
byte : -128에서 127 까지
short : -32,768 에서 32,767 까지
int : -2,147,483,648 부터 2,147,483,647
long : -9,223,372,036,854,775,808 부터
9,223,372,036,854,775,807
float : 3.4e-038에서 3.4e+038
double : double 타입은 많은 계산에서 큰 값
의 정밀도를 유지 해야할 경우에 사용
13년 10월 25일 금요일
문자 및 논리 자료형
• 자바의 문자는 16비트 유니코드 문자로 표현
되고 'u0000'에서 'uffff'까지 표현

• 자바의 논리 자료형은 true와 false로 값을 표
현

13년 10월 25일 금요일
상수
• 프로그램 내에서 값이 변하지 않는 변수
• 상수 선언 방법 : final 자료형 상수명 = 값;
예) final int COUNT = 1;

13년 10월 25일 금요일
배열
• 배열의 정의 : 동일한 타입의 값을 고정된 갯수
로 저장할 수 있는 구조체

• 배열의 구조 :

13년 10월 25일 금요일
배열(계속)
•
•

배열의 생성과 초기화 :
char[] charArray =
{‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J
’,’K’,’L’};

•

13년 10월 25일 금요일

배열의 생성 : char[] test =
new char[12];

다차원 배열 : char[][]
multiChar = new char[4]
[4];
형변환
• 형변환의 정의 : 기본자료형 간의 자료형이 변
환 되는 것을 의미한다.

• 형변환의 예 : int형이 short형으로 int형이

String으로 형변환이 발생, 실무에서는 String
과 기본자료형간의 형변환이 주로 사용된다.

• Integer.parseInt, Double.ParseDouble,
Integer.toString, Double.toString

13년 10월 25일 금요일
자바의 연산자와 수식구문

13년 10월 25일 금요일
산술 및 단항 연산자
• 산술 연산자 : + , - , *, /, %
• 단항 연산자 : ++, -- , + , • 할당 연산자 : =, op=
• 비교 연산자 : ==, !=, > , >= , <, <=
• 논리 연산자 : &&, ||
13년 10월 25일 금요일
수식과 구문
• 수식은 변수와 연산자 그리고 메소드 호출로 이
루어져 있다.

• 구문은 수식의 조합이다. 구문은 세미콜론(;) 으
로 구분된다.

예) System.out.println( 1 + 2 + 3 );
수식 : 1 + 2 + 3

13년 10월 25일 금요일
자바의 제어문

13년 10월 25일 금요일
조건문
• if-else

•

예) if(조건문){
구문;
}else if(조건문){
구문;
}else(조건문){
구문;
}
switch문

13년 10월 25일 금요일

예) swith(조건문){
case 값1:
구문;
case 값2:
구문;
default:
구문
}
반복문
• for문과

향상된 for

문

예) for(초기값;끝값;
조건){ 구문;
}
for(타입 var: 배열){
....
13년 10월 25일 금요일

}

• while반복문
예) while(조건){ ...
}
do-while반복문
예) do{ ...
}while(조건)
제어문에서 분기
•

Label없는 break

•

예) for(;;){

Label없는 continue
예)for(;;){

break;
}

•

continue;
}

Label있는 break
예) Label: for(;;){

•

Label있는 continue
예) Label: for(;;){

break Label;
}
13년 10월 25일 금요일

continue Label;
}
제어문의 분기(계속)
• return 문은 현재의 메서드를 종료할 수 있게
한다.

• return 문은 값을 반환할 수 있다.
예) 반환될자료형 메서드명(매개변수...){
return 반환값;
}

13년 10월 25일 금요일
기본적인 객체지향 이야기

13년 10월 25일 금요일
객체지향의 역사
• 1960년대 MIT에서 처음 만들어졌고 최초의 객
체지향언어는 Simula임

• 1970년대 Xerox에서 Smalltalk 언어를 개발
• 1980년대 Eiffel이 순수 객체지향을 표방
• 1990년대 C++과 Dephi가 대중에게 인정받아
널리 사용

13년 10월 25일 금요일
객체지향의 개념과 구성
요소
• 객체지향의 개념은 언어를 빗대어 설명하자면
명사와 동사로 구성되어 있다.

• 명사 : 변수 또는 상수[상태를 나타냄]
• 동사 : 메서드[행위를 나타냄]
• 핵심 개념 : 객체, 상속, 인터페이스
13년 10월 25일 금요일
객체
• 객체는 현실 세계의 사물을 프로그래밍 상에 모
델링하였다.

• 객체(Object) = 상태(명사) + 행위(동사)
• 절차지향 프로그래밍언어에서는 상태와 행위를
구분하지 않고 사용

예) 자동차를 객체로 묘사
상태 : 색, 엔진, 차종, 브레이크 타입 등
행위 : 현재 속도, 현재 rpm 등
13년 10월 25일 금요일
클래스
(class)
•

클래스는 객체를 만들어 내는 설계
도 또는 청사진 또는 틀
예) 클래스 : 도요타86의 설계도
객체 : A씨의 도요타86, B씨의 도
요타86 등

13년 10월 25일 금요일
상속
(extends)
•
•

13년 10월 25일 금요일

상속은 다음 세대에게 현
세대의 특징을 물려주는
행위를 말한다.
객체지향 언어에서 상속은
현재 클래스의 속성을 자
식 클래스에게 물려주는
것을 말한다.
인터페이스
(interface)
•
•

13년 10월 25일 금요일

인터페이스는 사전적 의미
로 상호작용하다라는 의미
를 가지고 있음
외부에 내부를 직접 개방
하지 않고 인터페이스를
통해서 내부의 기능을 간
접 사용할 수 있도록 하는
기능

1. 바이오스 전원공급
2. 하드 전원공급
3. 메모리 전원공급
4. 바이오스 부팅
5. ....
패키지(package)
• 패키지는 클래스나 인터페이스를 묶어주는 워
크스페이스 역할을 한다.

• 패키지를 이용하면 인터페이스, 클래스를 묶어
서 모듈로 묶어 줄 수 있다.
예) 패키지 선언방법
package com.pizzastudio;
class Test.. {
...
}
13년 10월 25일 금요일
클래스와 객체

13년 10월 25일 금요일
클래스 정의
class 키워드와 {, } 를 사용하여 몸체를 지정
몸체에는 필드, 생성자, 메서드를 정의
클래스명은 문자로 시작, 문자와 숫자만 사용
예)
public class 클래스명{
필드선언;
생성자선언;
메서드선언;
}
13년 10월 25일 금요일
상속과 인터페이스를 통
한 클래스 정의
class 클래스명 extends 부모클래스명
implements 인터페이스명{
필드 정의;
생성자 정의;
메서드 정의;
}

13년 10월 25일 금요일
클래스 정의(변수선언)
변수선언방법:접근제어자 변수타입 변수명 = 값;
변수 선언위치 :
public class VariableTest{
private int count; // 멤버 변수
private static int sum; // 클래스 변수
public int sumCount(){
private int sum = 0; // 로컬 변수
sum = sum + count;
return sum;
}
}
13년 10월 25일 금요일
클래스의 정의
(메서드 정의)
• 메서드 정의 방법

접근제어자 반환타입 메서드명(변수타입 변수
명, ...) {
...
return 반환값;
}
사용예
public void sum(int x, int y){
return x + y;
}

13년 10월 25일 금요일
클래스 정의(생성자)
• 생성자 정의 방법
public 클래스명(매개변수타입 매개변수,...){
}

• 생성자 생성 및 사용예
public Notebook(int cpu, int memory){
}
Notebook mybook = new Notebook();
13년 10월 25일 금요일
메서드에 값 전달 방법
• 값에 의한 전달
void callVal(int p)

• 참조에 의한 전달
void callRef(String
a)

callVal(1);
callRef("value");

13년 10월 25일 금요일
객체의 기본
•

객체의 생성
Computer my = new
Computer(1);
1. 선언 : Computer my
2. 생성 : new Computer
3. 초기화 : Computer(1)
4. 할당 : my = new
Computer(1);

13년 10월 25일 금요일
객체의 기본(계속)
• 객체의 사용방법
생성된객체명.필드명 : d1.name, new
Computer().name
메서드 호출방법
생성된객체명.메서드명(인자) : my.getCpu();

13년 10월 25일 금요일
this
•

this는 생성된 객체 자신을
가리키는 자바의 키워드

•

this.필드명 또는 this.메서
드명으로 필드와 메서드
호출

•

this(인자...)로 객체 자신의
생성자를 호출할 수 있음

13년 10월 25일 금요일
접근제어자
접근제어자

class

package

하위클래스

전역

public

가능

가능

가능

가능

지정안함

가능

가능

불가능

불가능

protected

가능

가능

가능

불가능

private

가능

불가능

불가능

불가능

13년 10월 25일 금요일
클래스 변수/메서드
• 클래스 변수와 클래스 메서드는 클래스에서

생성된 모든 객체에서 호출되어도 동일한 값
동일한 결과를 반환하는 메서드이다.

• 클래스 변수/메서드 정의 방법 : static int
COUNT; static void parseInt();

• 클래스 변수/메서드 사용 방법 :

Integer.COUNT, Integer.parseInt();

13년 10월 25일 금요일
중첩클래스
• 중첩 클래스 정의 : 클래스 내에 클래스를 정

의, 논리적으로 로직을 그룹핑할 목적 또는 정
보 은닉의 목적으로 사용됨

• 종류 : 이너 클래스, 로컬 클래스, 익명 클래스

13년 10월 25일 금요일
이너 클래스
• 이너클래스는 클래스 내, 메서드 바깥에 선언되
는 클래스이고 바깥 클래스 객체 생성 시에 동
시에 생성된다.

• 예)

class OuterClass{
class InnerClass{ ... }
...
}

13년 10월 25일 금요일
로컬 클래스
• 클래스 내부의 특정 블럭(메서드나 블럭) 내에
선언되는 클래스

• 사용예)

public class Member{
...
public void validJuminNo(){
class JuminNo{ ... }
return new JuminNo();
}

13년 10월 25일 금요일
익명 클래스
• 익명 클래스는 선언장소는 로컬클래스와 동일하
나 클래스의 이름을 사용하지 않는다.

• 사용예)

public class Hanger{
...
public void print(){
...
Clothes shirths = new Clothes(){
public void printColor(){ ... }
}
}

13년 10월 25일 금요일
Enum 타입
• Enum 타입은 사전에 정의된 상수의 집합과 같

다. Enum을 주로 사용하는 곳은 주, 방위, 색 배
열과 같은 일련의 상수 집합을 사용하는 곳이다.

• 사용예)enum Color{ RED, ORAGNE,
public
YELLOW, BLUE, PURPLE}
Color.RED, Color.ORANGE

13년 10월 25일 금요일
인터페이스와 상속

13년 10월 25일 금요일
인터페이스의 정의
• 자바에서 인터페이스를 정의하기 위해서는

interface 키워드를 사용하여 선언해야 한고 메서
드 내용을 정의하지 말아야 한다.

• 사용예)

public interface Figure{
public String getName();
public double getArea();
}

13년 10월 25일 금요일
인터페이스 구현
• 자바에서 인터페이스를 구현하기 위해서는 구

현할 클래스에서 implements 키워드로 인터페
이스를 구현해야 한다.
사용예)
public class Triangle implements Figure{
...
public String getName() { ... }
public dboule getArea() { ... }

13년 10월 25일 금요일
인터페이스의 사용
• 인터페이스를 구현한 객체들은 인터페이스 타
입의 변수에 할당될 수 있다.

• 사용예)
Figure a = new Triangle();
a.getArea();

13년 10월 25일 금요일
상속
• 상속은 부모 클래스의 속성을 자식클래스에 물
려줄 수 있는 방법을 제공한다.

• 자바의 모든 클래스는 java.lang.Object 클래스
를 상속받고 있다.

• 사용예)
public class Bmw320d extends Car{
....
13년 10월 25일 금요일
오버라이딩(Overriding)
• 자식 클래스는 부모 클래스의 메서드를 재정의
하여 사용할 수 있다. 이를 오버라이딩
(overriding) 이라고 부른다.

• 사용예
public class Bmw320d extends Car{
	


@Override

	

 	

 public void printCarName(){ ...
13년 10월 25일 금요일
다형성(polymorphism)
• 사전적 정의 : 같은 종에서 개체가 형태와 형질
등에 대해 다양성을 나타내는 상태

• 자바에서의 의미 : 동일한 부모 클래스를 상속

받은 자식클래스들에서 부모에게 물려받은 공
통 속성이외에 자식클래스만의 다양한 특성을
만들 수 있다.

13년 10월 25일 금요일
super
• 자식 객체에서 부모 객체에 접근하기 위해서
사용되는 키워드

• 부모 객채 셍성자/메서드 호출 방법
super(인자1, 인자2, ...)
super.메서드이름(인자1, 인자2, ...)
super(speed, gearType, engineType..)
super.print();
13년 10월 25일 금요일
추상클래스와 메서드
• abstract 키워드를 이용하여 선언하며 추상 클

래스의 일부 클래스는 몸체를 구현할 수도 있
고, 인터페이스 처럼 메서드 선언만 할 수도 있
다.

• 추상 클래스를 상속받은 클래스에서 선언받은
클래스를 구현하면 된다.

public abstract class Parent{
abstract void print();
13년 10월 25일 금요일
Number와 String

13년 10월 25일 금요일
Number클래스
• Boolean, Byte, Character, Float, Integer, Long,
Short

• System.out.format("%10.2f%n", pi); // ‘ 3.14’
• System.out.println(format("$###,###,###",
number)); // $1,234,567,890

• 오토박싱과 언박싱

int a = 1;
Integer b = 10; // 오토박싱
System.out.println(b.equals(a)); // 언박싱

13년 10월 25일 금요일
String 클래스
• String 클래스는

문자열을 처리할
수 있는 클래스

• 실무에서 가장
많이 사용되는
클래스

13년 10월 25일 금요일

메서드
length
indexOf
substring
replace
StringBuilder 클래스
• StringBuilder(CharSequence cs),
StringBuilder(int capacity),
StringBuilder(String s)

• append
• insert
• delete
• replace
13년 10월 25일 금요일
Date와 Time 다루기

13년 10월 25일 금요일
java.util.Calendar 클래
스

• Calendar 클래스는 시간과 년(YEAR), 월

(MONTH), 일(DAY_OF_MONTH), 시간
(HOUR) 등의 날짜 시간관련 데이터를 다루
기 위한 추상 클래스이다. 이 클래스에서 표현
되는 시간은 GMT 기준으로 1970년 1월 1일
00시 00분 00초 이후의 시간을 밀리세컨드 단
위의 숫자로 표현될 수 있다.

• Calendar calendar = new

GregorianCalendar(2013,4,20);

13년 10월 25일 금요일
날짜 포멧
• DateFormat 클래스
// Locale KOREAN
formatter = DateFormat.getDateInstance(...);
today = new Date();
dayStr = formatter.format(today);
System.out.println(dayStr);

13년 10월 25일 금요일
날짜 포멧(계속)
• SimpleDateFormat
String pattern = "서기 yyyy년 MM월 dd일 HH
시 mm분 ss초 ";
SimpleDateFormat formatter = new
SimpleDateFormat(pattern, Locale.KOREA);
String todayStr = formatter.format(today);

13년 10월 25일 금요일
정규식과 플랫폼 환경

13년 10월 25일 금요일
정규식
• 정규식(Regular Expression)은 문자열에서 특
정 단어, 특정 문자의 패턴과 일치하는 문자열
을 찾는 방법을 제공하는 특정 패턴이다.

• 패턴 종류

[abc] : a 또는 b 또는 C가 있는 문자열
[^abc] : a, b, c 가 없는 문자열
[a-zA-Z] : a부터 z, A부터 Z가 있는 문자

열
[a-d[m-p]] : a부터 d 또는 m부터 p
[a-z&&[def]] : d, e, f 문자
13년 10월 25일 금요일
정규식(계속)
• 미리 정의된 패턴

. : 모든 문자
d : 숫자
D : 숫자가 아닌 문자
s : 공백문자
S : 공백이 아닌 문자
w : 알파벳과 숫자
W : 알파벳과 숫자가 아닌 문자

13년 10월 25일 금요일
정규식(계속)
• 수량자(정량자)

X? : X값이 한번 또는 나타나지 않음
X* : X값이 0번 이상 나타남
X+ : X값이 1번 이상 나타남
X{n} : X값이 n번 이상 나타남
X{n,} : X값이 최소 n 번 이상 나타남
X{n,m} : x값이 최소 n번에서 m번까지
나타남

13년 10월 25일 금요일
정규식(계속)
• 정규식 사용방법
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

13년 10월 25일 금요일
Properties 파일
• Properties 파일은 키와 값 쌍으로 구성되어있

다. log.dir=/log/application_log와 같이 log.dir
이 키(key)이고 /log/application_log가 값이다.

• 자바에서는 Properties 객체를 제공한다.

prop = new Properties();
prop.load(getClass().getResourceAsStream(".
/default.properties"));

13년 10월 25일 금요일
자바의 환경변수
• OS에서는 환경변수를 Properties와 동일한
방식으로 보관하고 있다.

• System.getenv() 메서드는 JVM의 환경변수
Map 형식으로 반환한다.

13년 10월 25일 금요일
제네릭과 어노테이션

13년 10월 25일 금요일
제네릭
• 제네릭(Generic)은 파라미터의 형식을 미리
정의하는 것이다.

• class 클래스명 <T1, T2, ... Tn>{ ... }
• 타입파라미터 : T(Type), K(Key), N(Number),
E(Element),V(Value), 기타

• Type<String> a = new Type<String>();
• 제네릭 메서드
13년 10월 25일 금요일
타입 추론과 타입추론
• 자바 컴파일러는 메서드 호출 시, 객체 생성 시

에 제네릭 타입을 유추할 수 있다. 추론 알고리
즘은 인자의 타입이나 호출 결과로 반환 되는
값에 의해 결정된다.

• 예)

public class JukeBox<T extends Number>
{ ... }
JukeBoxDemo.addJukeBox(new Integer(10),
list);

13년 10월 25일 금요일
와일드 카드
• 제네릭 코드에서 명시적으로 어떠한 타입의

객체가 들어오는지 모를 경우, ? 기호를 사용하
구분

사용하는 곳

상한와일드카드

<? extends T>

써야하는 곳

하한와일드카드

<? super T>

읽어야 하는 곳

무제한와일드카드

13년 10월 25일 금요일

형태

<?>

쓰거나 읽어야 하는
곳
어노테이션
• 어노테이션은 프로그램에 대한 메타데이터를
제공하는 역할을 한다. 하지만 프로그램의 코
드로서 동작하지는 않는다.

• 선언 : public @interface Description {
• 사용 : @Description( ... ) public class
TestAnnotation {

13년 10월 25일 금요일
콜렉션프레임워크

13년 10월 25일 금요일
콜렉션 프레임워크

13년 10월 25일 금요일
Set
• 정의 : 인터페이스이고 자료를 중복해서 저장
할 수 없는 목록

• 주요 클래스 : TreeSet, HashSet,
LinkedHashSet

• Collection<Type> list = new
HashSet<Type>();

• 주요 메서드 : add, remove, set, get
13년 10월 25일 금요일
List
• 정의 : 인터페이스이며 중복된 자료를 저장하
는 목록

• 주요 클래스 : ArrayList, LinkedList
• List<String> list = new ArrayList<String>();
• 주요 메서드 : get, set, add, remove, indexOf
13년 10월 25일 금요일
Queue
• 정의 : 선입선출 구조의 자료구조를 제공
• 주요 클래스 : LinkedList
• Queue<String> linkedQueue = new
LinkedList<String>();

• 주요 메서드 : element, add, peek, poll, offer
13년 10월 25일 금요일
Deque
• 정의 : queue 자료구조는 한 쪽에서만 입력이

되고 다른 한 쪽에서는 출력만 되는 구조인 반
면에 deque는 양쪽에서 모두 입출력이 가능한
구조이다.

• 주요 클래스 : ArrayDeque,
LinkedBlockingDeque

• 주요 메서드 : addFirst, addLast,

pollLast,pollFirst, peekFirst, peekLast

13년 10월 25일 금요일
Map
• 정의 : 키와 값으로 이루어진 자료구조
• 주요 클래스 : HashMap, TreeMap,
LinkedHashMap

• 주요 메서드 : put, get, remove, size, keySet,
containKey

13년 10월 25일 금요일
예외처리 방법

13년 10월 25일 금요일
예외
• 컴파일 또는 프로그램 실행 도중에 예상치 못
한 데이터가 유입되거나 문제가 발생할 경우
에 발생하는 이벤트

• 예외(Exception)객체에 에러가 발생했을 때
상태와 정보가 저장된다.

• 예외가 발생하면 시스템에서 예외를 던진다.
• 예외를 처리할 수 있도록 예외를 잡아야 한다.
13년 10월 25일 금요일
예외 처리방법
try{
	

 // 예외가 발생할 것 같은 구문
}catch(Exception1 e1){
// e1라는 이름을 가진 Exception1 객체
}catch(Exception2 e2){
// e2라는 이름을 가진 Exception2 객체
}finally{
// finally 내의 괄호 구문은 무조건 실행 된다.
}
13년 10월 25일 금요일
예외 클래스
모든 예외 클래스는
Exception 클래스를
상속받고 있다.
Exception 클래스에
서는 getMessage,
printStackTrace,
toString 메서드 제공

13년 10월 25일 금요일
예외 던지기
public void execute() throws IOException {
...
}
public void execute(List<String> list){
	

 if(list == null){
	

 	

 throw new ListException();
	

 }
...
}
13년 10월 25일 금요일
try-resource
AutoCloseable를 구현한 클래스에 한하여 사
용
자동으로 리소스를 반환해준다.
try(BufferedReader in = new
BufferedReader(new FileReader("foo.in"))){
	

 System.out.println(in.readLine());
}catch(Exception e){ }
13년 10월 25일 금요일
사용자 정의 예외
• 사용자 정의 예외를 만들기 위해서 Throwable

을 상속받은 Exception 및 하위 클래스를 상속
받아 만듬

• 예)

public class ListException extends
RuntimeException { ... }

13년 10월 25일 금요일
쓰레드

13년 10월 25일 금요일
프로세스와 쓰레드
• 프로세스 : 독립적인 자원을 가지고 하나의 독
립된 실행단위. 프로세스는 별도의 메모리 공
간을 가지고 있다.

• 쓰레드 : 경량 프로세스라고 부르며 별도의 자

원과 메모리 공간을 가지고 있다. 하나의 프로
세스는 하나의 쓰레드를 가지고 있다.

13년 10월 25일 금요일
쓰레드 생성
• Runnable 인터페이스로 쓰레드 구현
• Thread 클래스를 상속받아 쓰레드 구현
• Thread 클래스의 주요 메서드
interrupt() : 쓰레드의 중단
join() : 쓰레드의 대기

13년 10월 25일 금요일
동기화 문제
1. 쓰레드 A : C 변수를 조회한다. => 0 값을 얻는다.
2. 쓰레드 B : C 변수를 조회한다. => 0 값을 얻는다.
3. 쓰레드 A : C 변수에 1을 추가한다 => C 변수에는 1
이 들어있다.
4. 쓰레드 B : C 변수에 1을 뺀다 => C 변수에는 0이 들
어있다.
5. 쓰레드 A : C 변수를 조회한다. => 쓰레드 A는 0을 얻
는다.

13년 10월 25일 금요일
synchronized와 기본락
• 쓰레드 간의 간섭과 메모리 불일치 문제 해결
을 위해 synchronized 구문과 메서드를 제공

• public synchronized void increment() {...}
• 자바의 모든 객체는 Lock을 가지고 있다. 이를
모니터락 또는 모니터라고 부른다.

• 쓰레드에서 객체에 접근하려고 할 때 객체의
모니터락을 획득한 뒤에 객체에 접근한다.

13년 10월 25일 금요일
교착상태,기아상태
• 교착상태(DeadLock)은 두 개 이상의 쓰레드
가 서로 끝나기를 기다리고 있는 상태

• 기아상태(Starvation)는 다수의 쓰레드가 하나
의 자원을 공유할때 하나의 쓰레드가 자원을
점유하고 놔주지 않는 상태

• synchronized 를 이용해서 자원을 동기화할
때 위의 상태에 빠지지 않도록 조심해야함

13년 10월 25일 금요일
lock관리
• synchronized(Object)
• notify
• notifyAll
• wait
13년 10월 25일 금요일
java.util.concurrent
• ReentrantLock
• ExecutorService
Threadpooling
Thread 생성 및 실행
BlockingQueue, ConcurrentHashMap

13년 10월 25일 금요일
기본 I/O와 파일 I/O

13년 10월 25일 금요일
기본 I/O
•
•

13년 10월 25일 금요일

입력 스트림 : 소스에서 데
이터를 순차적으로 읽는
것
출력 스트림 : 대상에 데이
터를 순차적으로 쓰는 것
바이트,캐릭터,버퍼스트
림

• 바이트 스트림 : 8 바이트 단위로 입/출력하는
스트림, FileInputStream, FileOutputStream

• 캐릭터 스트림 : 문자형 데이터타입을 지원하는
스트림, 캐릭터 셋을 설정해야함, FileReader,
FileWriter

• 버퍼 스트림 : 버퍼를 가진 스트림,

BufferReader, BufferWriter,
BufferedInputStream, BufferedOutputStream

13년 10월 25일 금요일
콘솔출력 및 포멧팅
• Console console = System.console();
• System.out.format(“ 3 x 4 는 %d 이다”, i);
• %[인자번호$][플래그][폭][.정밀도]유형
• System.out.format("%1$+20.5f
%n",Math.PI); -> "

13년 10월 25일 금요일

+3.14159"
데이터, 객체 스트림
•
•

객체 스트림은 파일 또는 네트워크에 객체를 저장할
수 있는 I/O를 제공해준다. ObjectInputStream,
ObjectOutputStream

•

13년 10월 25일 금요일

데이터 스트림은 String 타입의 데이터뿐만 아니라
기본형 타입의 값도 다룰 수 있다. DataInputStream,
DataOutputStream

직렬화(serialization)는 객체를 저장하기 위해서 복원
가능한 형태의 스트림으로 저장하는 행위를 말한다.
nio.Path클래스
•
•
•
•
•
•
13년 10월 25일 금요일

Path 클래스는 디렉토리와 파일 경로에 대한 정
보를 담고 있다.
Path p = Paths.get("/Users/system")
p.getName() : Users
p.toString() : /Users/system
p.getNameCount() : 3
p.subPath(0,1) : Users
디렉토리와 파일 다루기
• Files 클래스는 파일과 디렉토리를 다루는데
유용한 메서드를 제공해주고 있다.

• Files.exists, Files.notExists, Files.isWritable,
Files.isExecutable, Files.isSameFile

• Files.copy, Files.move, Files.readAttribute,
Files.getFileStore

• Files.createDirectories,

Files.newDirectoryStream

13년 10월 25일 금요일
파일에 읽고 쓰기
• Files.readAllBytes, Files.readAllLines,
Files.write

• Files.newBufferedWriter,
Files.newBufferedReader

• SeekableByteChannel s =
Files.newByteChannel(...)

13년 10월 25일 금요일
FileVisitor
•

FileVisitor는 특정 조건에 맞는 파일 또는 디렉토리
를 추출할 수 있게 해준다.

•
•
•

visitFile : 디렉토리 내의 파일이 호출 되었을 때

•

visitFileFailed : 디렉토리 내의 파일을 호출 할 수 없
을때

13년 10월 25일 금요일

preVisitDirectory : 디렉토리 내에 들어가기 전에
postVisitDirectory : 디렉토리에서 나올 때, 이 때에
는 하위 디렉토리는 탐색이 끝났다.
네트워크 다루기

13년 10월 25일 금요일
OSI 7 계층
A컴퓨터

B컴퓨터

Application layer

Application layer

Presentation layer

Presentation layer

Session layer

Session layer

Transport layer

Transport layer

Network layer

Network layer

Datalink layer

Datalink layer

Physical layer

Physical layer

13년 10월 25일 금요일
TCP와 UDP
• TCP : 인터넷 프로토콜(IP)기반으로 동작하며
세션이 유지된 상태로 메시지를 전달

• UDP : 인터넷 프로토콜(IP)기반으로 동작하며
데이터 전송에 대한 신뢰성이 없다.

13년 10월 25일 금요일
포트
•

13년 10월 25일 금요일

포트 : 하나의 물리적
인 커넥션을 여러 개
의 연결로 분할하여
사용할 수 있도록 부
여되는 번호
URL 클래스
• URL은 웹페이지의 주소를 의미함
• 자바에서는 손쉽게 웹페이지에 접근할 수 있
도록 URL클래스를 제공

• URL hostURL = new URL("http://
blog.pizzastudio.org/");

• BufferedReader br = new

BufferedReader(new
InputStreamReader(host.openStream()));

13년 10월 25일 금요일
TCP프로그래밍
• 서버와 클라이언트 프로그램 구조
• 서버: server = new ServerSocket(9999);
clientSocket = server.accept();

• 클라이언트 : socket = new
Socket("localhost", 9999);

13년 10월 25일 금요일
UDP 프로그래밍
• UDP는 독립적인 데이터그램 단위로 데이터
를 잘라서 전송한다. 데이터그램이 순서대로
도착할 지에 대한 보장이 없다.

• DatagramSocket socket = new

DatagramSocket(9998); DatagramPacket
packet = new DatagramPacket(buf,
buf.length); socket.receive(packet);
socket.send(packet);

13년 10월 25일 금요일
JDBC

13년 10월 25일 금요일
데이터베이스
• 자료를 저장하고 관리하기 위한 별도의 시스
템

• 자료저장 방법에 따라 관계형 데이터베이스,

객체형 데이터베이스등이 있으나 현재 관계형
데이터베이스가 가장 널리 사용됨

• 대표적인 제품은 Oracle, MySQL, MS-SQL등
이 있음

13년 10월 25일 금요일
관계형 데이터베이스
• 자료를 저장할 때 테이블 단위로 자료를 저장
함

• 테이블은 행과 열로 구분되어 있는 구조
• SQL이라는 일종의 언어를 통해서 자료를 질
의할 수 있음

• SQL : select * from emp; select * from dept;
• select, insert, update, delete, create
13년 10월 25일 금요일
JDBC
• 데이터베이스에 접근하여 작업할 수 있도록
연결을 제공하는 라이브러리 모음

• 데이터베이스별로 JDBC 드라이버가 존재한
다.

• JDBC 인터페이스는 모두 동일하기 때문에 데
이터베이스별로 JDBC를 사용하는 방법은 동
일하다.

13년 10월 25일 금요일
Connection
•
•
•

jdbc:oracle:thin -> jdbc 드라이버 이름

•
•
13년 10월 25일 금요일

Connection con =
DriverManager.getConnection("jdbc:oracle:thin:
@//localhost:1521/xe","system","manager");

xe -> 오라클 DB의 sid

localhost:1521 -> 데이터베이스 서버의 주소와 포
트번호
system, manager -> DB의 아이디와 패스워드
Statement와 ResultSet
• Statement stmt = con.createStatement();
• ResultSet rs = stmt.executeQuery("select *
from emp");

• while(rs.next()){

System.out.println(rs.getString(1) + "
"+rs.getString(2));
}

• rs.close(); stmt.close(); con.close();
13년 10월 25일 금요일
ResultSet 타입
• 커서의 동작방

식을 지정하거
나 ResultSet의
변경을 데이터
베이스에 직접
반영할 수 있다.

13년 10월 25일 금요일

TYPE_FORWARD_ONLY
TYPE_SCROLL_INSENSITIVE
TYPE_SCROLL_SENITIVE
CONCUR_READ_ONLY
CONCUR_UPDATEABLE
PreparedStatement
• PreparedStatement ps =

con.prepareStatement("select * from emp
where emp_no = ? ");
ps.setInt(1, 258652);
rs = ps.executeQuery();
while(rs.next()){
	

 System.out.println(rs.getString(1) + " "
+ rs.getString(2));
}

13년 10월 25일 금요일
RowSet
•

•

13년 10월 25일 금요일

rowSet = new OracleCachedRowSet();
rowSet.setUrl(dbUrl);
rowSet.setUsername(username);
rowSet.setPassword(password);
rowSet.setCommand("SELECT * FROM EMP");
rowSet.first();
rowSet.updateString("employee_name", "1." +
rowSet.getString("employee_name"));
...
rowSet.updateRow();
스윙

13년 10월 25일 금요일
JComponent
• JComponent -▷ Container -▷ Component
• 스윙의 모든 컴포넌트는 JComponent를 상속
받고 있다.

• setToolTipText, setBorder,

setMinimumSize, 더블 버퍼링, 키 연결, 드래
그 앤드롭 관련 기능 제공

13년 10월 25일 금요일
BorderLayout

레이아웃

BoxLayout

CardLayout
FlowLayout

GridLayout
13년 10월 25일 금요일

GridBagLayout
Label, TextField,
TextArea
• JLabel label = new JLabel("라벨입니다.",
JLabel.CENTER);

• JTextField field = new JTextField(20);
• JTextArea area = new JTextArea(20,10);

13년 10월 25일 금요일
Button
• JButton button = new JButton("저장");
• JCheckBox krBox = new JCheckBox("한
국");

• JRadioButton krRad = new
JRadioButton("한국");

• ButtonGroup group = new ButtonGroup();
• group.add(krRad);
13년 10월 25일 금요일
Dialog
•
•

public class DialogExample extends JPanel implements
ActionListener {
…
@Override public void
actionPerformed(ActionEvent e) {

•

13년 10월 25일 금요일

JOptionPane.showMessageDialog(frame, "다이얼로그
테스트입니다.");

메시지 타입: ERROR_MESSAGE,
INFORMATION_MESSSAGE,WARNING_MESSAGE,
QUESTION_MESSAGE, PLAIN_MESSAGE
Progress monitor
• 프로그레스 모니터를 사용하면 다이얼로그에
진행상태를 표시할 수 있다.

• ProgressMonitor progressMonitor = new

ProgressMonitor(ProgressMonitorExample.
this,"Task Number 1	

 ", "", 0,
task.getLengthOfTask());

13년 10월 25일 금요일
Table, Scroll Pane
• JTable table = new JTable(data,

columnNames);
JScrollPane scrollPane = new
JScrollPane(table);
table.setFillsViewportHeight(true);

13년 10월 25일 금요일
ComboBox와 List
• JComboBox fruitList = new
JComboBox(fruits);

• DefaultListModel

model = new
DefaultListModel();

• JList list = new JList(model);
• list.setSelectionMode(ListSelectionModel.SI
NGLE_INTERVAL_SELECTION);

13년 10월 25일 금요일
이벤트 처리
pubic class EventExample … implements
ActionListener{ // 1. 이벤트 리스너 작성
	

 // 2. 이벤트 리스너에서 이벤트를 받았을 때 처리해
야할 내용을 작성
	

 public void actionPerformed(ActionEvent e){ ... }
	

 public void test(){
	

 	

 // 3. 이벤트를 받아야할 컴포넌트에 이벤트 리
스너를 등록한다.
	

 	

 btn.addActionListener(this);
13년 10월 25일 금요일
이벤트의 종류
• 캐럿 리스너
• 속성 변경 리스너
• 액션 리스너
• 컨테이너 리스너
• 포커스 리스너
• 아이템 리스너
13년 10월 25일 금요일

• 리스트 선택 리스너
• 마우스 리스너
The End

13년 10월 25일 금요일

Contenu connexe

Tendances

Intro To Mongo Db
Intro To Mongo DbIntro To Mongo Db
Intro To Mongo Db
chriskite
 
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on KubernetesApache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
DataWorks Summit
 

Tendances (20)

MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 
Apache Flink @ NYC Flink Meetup
Apache Flink @ NYC Flink MeetupApache Flink @ NYC Flink Meetup
Apache Flink @ NYC Flink Meetup
 
Camel Day Italia 2021 - Camel K
Camel Day Italia 2021 - Camel KCamel Day Italia 2021 - Camel K
Camel Day Italia 2021 - Camel K
 
Introduction to Kafka Streams
Introduction to Kafka StreamsIntroduction to Kafka Streams
Introduction to Kafka Streams
 
Introduction to KSQL: Streaming SQL for Apache Kafka®
Introduction to KSQL: Streaming SQL for Apache Kafka®Introduction to KSQL: Streaming SQL for Apache Kafka®
Introduction to KSQL: Streaming SQL for Apache Kafka®
 
Exploring KSQL Patterns
Exploring KSQL PatternsExploring KSQL Patterns
Exploring KSQL Patterns
 
Let's read code: the python-requests library
Let's read code: the python-requests libraryLet's read code: the python-requests library
Let's read code: the python-requests library
 
ksqlDB - Stream Processing simplified!
ksqlDB - Stream Processing simplified!ksqlDB - Stream Processing simplified!
ksqlDB - Stream Processing simplified!
 
Kafka Tutorial: Kafka Security
Kafka Tutorial: Kafka SecurityKafka Tutorial: Kafka Security
Kafka Tutorial: Kafka Security
 
More expressive types for spark with frameless
More expressive types for spark with framelessMore expressive types for spark with frameless
More expressive types for spark with frameless
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Fs2 - Crash Course
Fs2 - Crash CourseFs2 - Crash Course
Fs2 - Crash Course
 
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and HydraBuilding Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
 
Creating Awesome Web APIs is a Breeze
Creating Awesome Web APIs is a BreezeCreating Awesome Web APIs is a Breeze
Creating Awesome Web APIs is a Breeze
 
Diving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka ConnectDiving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka Connect
 
Intro To Mongo Db
Intro To Mongo DbIntro To Mongo Db
Intro To Mongo Db
 
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on KubernetesApache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes
 
Java I/O and Object Serialization
Java I/O and Object SerializationJava I/O and Object Serialization
Java I/O and Object Serialization
 
Building Event-Driven (Micro) Services with Apache Kafka
Building Event-Driven (Micro) Services with Apache KafkaBuilding Event-Driven (Micro) Services with Apache Kafka
Building Event-Driven (Micro) Services with Apache Kafka
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examples
 

En vedette

Did system4
Did system4Did system4
Did system4
Km Oh
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
Jubok Kim
 
임베디드시스템개발 Part1
임베디드시스템개발 Part1임베디드시스템개발 Part1
임베디드시스템개발 Part1
Minsuk Lee
 
포스트 스마트폰 시대 웨어러블 디바이스
포스트 스마트폰 시대 웨어러블 디바이스포스트 스마트폰 시대 웨어러블 디바이스
포스트 스마트폰 시대 웨어러블 디바이스
정문 김
 

En vedette (20)

자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지
 
Java 다형성
Java 다형성Java 다형성
Java 다형성
 
임베디드 시스템 설계 - 출입구 게이트
임베디드 시스템 설계 - 출입구 게이트임베디드 시스템 설계 - 출입구 게이트
임베디드 시스템 설계 - 출입구 게이트
 
Did system4
Did system4Did system4
Did system4
 
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
 
주변의 임베디드 시스템 찾기 - 지하철 전광판
주변의 임베디드 시스템 찾기 - 지하철 전광판주변의 임베디드 시스템 찾기 - 지하철 전광판
주변의 임베디드 시스템 찾기 - 지하철 전광판
 
1인 창조기업을 위한 클라우드 서비스와 스마트 디바이스 활용 all
1인 창조기업을 위한 클라우드 서비스와 스마트 디바이스 활용 all1인 창조기업을 위한 클라우드 서비스와 스마트 디바이스 활용 all
1인 창조기업을 위한 클라우드 서비스와 스마트 디바이스 활용 all
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템KGC2010   김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
KGC2010 김주복, 김충효 - M2 프로젝트의 절차적 리깅 시스템
 
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 Netty
 
Mqtt 소개
Mqtt 소개Mqtt 소개
Mqtt 소개
 
임베디드시스템개발 Part1
임베디드시스템개발 Part1임베디드시스템개발 Part1
임베디드시스템개발 Part1
 
포스트 스마트폰 시대 웨어러블 디바이스
포스트 스마트폰 시대 웨어러블 디바이스포스트 스마트폰 시대 웨어러블 디바이스
포스트 스마트폰 시대 웨어러블 디바이스
 
푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary푸시개발 정리 - Push Notification Summary
푸시개발 정리 - Push Notification Summary
 
S블로거가 본 스마트tv
S블로거가 본 스마트tvS블로거가 본 스마트tv
S블로거가 본 스마트tv
 
영화정보기술
영화정보기술영화정보기술
영화정보기술
 
제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]제안서N School(영상교육영상회의)[1]
제안서N School(영상교육영상회의)[1]
 
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
[한국의SNS 컨퍼런스]N스크린 기반 스마트UX
 
RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.RAD Studio XE8을 소개합니다.
RAD Studio XE8을 소개합니다.
 

Similaire à Java programming pdf

Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008
daliot
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
KoChungWook
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4
yonsei
 

Similaire à Java programming pdf (20)

[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
C++ Advanced 강의 1주차
C++ Advanced 강의 1주차C++ Advanced 강의 1주차
C++ Advanced 강의 1주차
 
강의자료3
강의자료3강의자료3
강의자료3
 
Smalltalk at Altlang 2008
Smalltalk at Altlang 2008Smalltalk at Altlang 2008
Smalltalk at Altlang 2008
 
Python programming for Bioinformatics
Python programming for BioinformaticsPython programming for Bioinformatics
Python programming for Bioinformatics
 
Yapp a.a study 2 reflection+annotation
Yapp a.a study 2 reflection+annotationYapp a.a study 2 reflection+annotation
Yapp a.a study 2 reflection+annotation
 
Scalability
ScalabilityScalability
Scalability
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
5장 객체와클래스
5장 객체와클래스5장 객체와클래스
5장 객체와클래스
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
Java 8 고급 (1/6)
Java 8 고급 (1/6)Java 8 고급 (1/6)
Java 8 고급 (1/6)
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4
 
Object C - RIP
Object C - RIPObject C - RIP
Object C - RIP
 
파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)파이썬 데이터 분석 (18년)
파이썬 데이터 분석 (18년)
 
Scala
ScalaScala
Scala
 

Java programming pdf

  • 1. 현업개발자의 실무 멘토링 JAVA 입문 mhb8436@gmail.com 13년 10월 25일 금요일
  • 2. 목차 • 자바 시작하기 • 자바의 자료형 • 자바의 연산자 • 자바의 제어문 • 기본적인 객체지향 이야기 13년 10월 25일 금요일 • 클래스와 객체 • 인터페이스와 상속 • String과 Number • Date와 Format • 정규식과 플랫폼 환 경
  • 3. 목차(계속) • 제네릭과 어노테이 션 • 자바 콜렉션 프레임 워크 • 예외 처리 클래스 • 쓰레드 13년 10월 25일 금요일 • 기본 IO와 파일IO • 네트워크 다루기 • JDBC • 스윙 프로그래밍 • XML 다루기
  • 5. 자바 이야기 • 1991년 제임스 고슬링이 자바 프로젝트를 시 작 자바 프로젝트의 결과물로서 1995년 자바 1.0 탄생, Write Once, Run Anywhere • Java SE, Java EE, Java ME • Java 프로그램 실행 방법 13년 10월 25일 금요일
  • 6. 자바로 할 수 있는 일 •웹 13년 10월 25일 금요일 • Android • 기타
  • 7. 자바 설치 및 프로그램 작성 • JDK 설치 • 자바 환경설정 방법 • HelloWorld.java 작성 • 이클립스를 이용한 HelloWorld.java 작성 13년 10월 25일 금요일
  • 9. 변수와 자료형 • 변수는 값을 공간 • 변수를 선언하는 방법 : 변수타입 변수명 예) int count, boolean check 변수명에 사용가능한 문자 : 문자, 숫자, $, _ 실무에서는 문자와 숫자를 주로 사용 예약어는 사용 금지 : class, boolean, byte, public, private, int .... 13년 10월 25일 금요일
  • 10. 기본 자료형(Primitive Type) • 숫자 자료형 byte : -128에서 127 까지 short : -32,768 에서 32,767 까지 int : -2,147,483,648 부터 2,147,483,647 long : -9,223,372,036,854,775,808 부터 9,223,372,036,854,775,807 float : 3.4e-038에서 3.4e+038 double : double 타입은 많은 계산에서 큰 값 의 정밀도를 유지 해야할 경우에 사용 13년 10월 25일 금요일
  • 11. 문자 및 논리 자료형 • 자바의 문자는 16비트 유니코드 문자로 표현 되고 'u0000'에서 'uffff'까지 표현 • 자바의 논리 자료형은 true와 false로 값을 표 현 13년 10월 25일 금요일
  • 12. 상수 • 프로그램 내에서 값이 변하지 않는 변수 • 상수 선언 방법 : final 자료형 상수명 = 값; 예) final int COUNT = 1; 13년 10월 25일 금요일
  • 13. 배열 • 배열의 정의 : 동일한 타입의 값을 고정된 갯수 로 저장할 수 있는 구조체 • 배열의 구조 : 13년 10월 25일 금요일
  • 14. 배열(계속) • • 배열의 생성과 초기화 : char[] charArray = {‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J ’,’K’,’L’}; • 13년 10월 25일 금요일 배열의 생성 : char[] test = new char[12]; 다차원 배열 : char[][] multiChar = new char[4] [4];
  • 15. 형변환 • 형변환의 정의 : 기본자료형 간의 자료형이 변 환 되는 것을 의미한다. • 형변환의 예 : int형이 short형으로 int형이 String으로 형변환이 발생, 실무에서는 String 과 기본자료형간의 형변환이 주로 사용된다. • Integer.parseInt, Double.ParseDouble, Integer.toString, Double.toString 13년 10월 25일 금요일
  • 17. 산술 및 단항 연산자 • 산술 연산자 : + , - , *, /, % • 단항 연산자 : ++, -- , + , • 할당 연산자 : =, op= • 비교 연산자 : ==, !=, > , >= , <, <= • 논리 연산자 : &&, || 13년 10월 25일 금요일
  • 18. 수식과 구문 • 수식은 변수와 연산자 그리고 메소드 호출로 이 루어져 있다. • 구문은 수식의 조합이다. 구문은 세미콜론(;) 으 로 구분된다. 예) System.out.println( 1 + 2 + 3 ); 수식 : 1 + 2 + 3 13년 10월 25일 금요일
  • 20. 조건문 • if-else • 예) if(조건문){ 구문; }else if(조건문){ 구문; }else(조건문){ 구문; } switch문 13년 10월 25일 금요일 예) swith(조건문){ case 값1: 구문; case 값2: 구문; default: 구문 }
  • 21. 반복문 • for문과 향상된 for 문 예) for(초기값;끝값; 조건){ 구문; } for(타입 var: 배열){ .... 13년 10월 25일 금요일 } • while반복문 예) while(조건){ ... } do-while반복문 예) do{ ... }while(조건)
  • 22. 제어문에서 분기 • Label없는 break • 예) for(;;){ Label없는 continue 예)for(;;){ break; } • continue; } Label있는 break 예) Label: for(;;){ • Label있는 continue 예) Label: for(;;){ break Label; } 13년 10월 25일 금요일 continue Label; }
  • 23. 제어문의 분기(계속) • return 문은 현재의 메서드를 종료할 수 있게 한다. • return 문은 값을 반환할 수 있다. 예) 반환될자료형 메서드명(매개변수...){ return 반환값; } 13년 10월 25일 금요일
  • 25. 객체지향의 역사 • 1960년대 MIT에서 처음 만들어졌고 최초의 객 체지향언어는 Simula임 • 1970년대 Xerox에서 Smalltalk 언어를 개발 • 1980년대 Eiffel이 순수 객체지향을 표방 • 1990년대 C++과 Dephi가 대중에게 인정받아 널리 사용 13년 10월 25일 금요일
  • 26. 객체지향의 개념과 구성 요소 • 객체지향의 개념은 언어를 빗대어 설명하자면 명사와 동사로 구성되어 있다. • 명사 : 변수 또는 상수[상태를 나타냄] • 동사 : 메서드[행위를 나타냄] • 핵심 개념 : 객체, 상속, 인터페이스 13년 10월 25일 금요일
  • 27. 객체 • 객체는 현실 세계의 사물을 프로그래밍 상에 모 델링하였다. • 객체(Object) = 상태(명사) + 행위(동사) • 절차지향 프로그래밍언어에서는 상태와 행위를 구분하지 않고 사용 예) 자동차를 객체로 묘사 상태 : 색, 엔진, 차종, 브레이크 타입 등 행위 : 현재 속도, 현재 rpm 등 13년 10월 25일 금요일
  • 28. 클래스 (class) • 클래스는 객체를 만들어 내는 설계 도 또는 청사진 또는 틀 예) 클래스 : 도요타86의 설계도 객체 : A씨의 도요타86, B씨의 도 요타86 등 13년 10월 25일 금요일
  • 29. 상속 (extends) • • 13년 10월 25일 금요일 상속은 다음 세대에게 현 세대의 특징을 물려주는 행위를 말한다. 객체지향 언어에서 상속은 현재 클래스의 속성을 자 식 클래스에게 물려주는 것을 말한다.
  • 30. 인터페이스 (interface) • • 13년 10월 25일 금요일 인터페이스는 사전적 의미 로 상호작용하다라는 의미 를 가지고 있음 외부에 내부를 직접 개방 하지 않고 인터페이스를 통해서 내부의 기능을 간 접 사용할 수 있도록 하는 기능 1. 바이오스 전원공급 2. 하드 전원공급 3. 메모리 전원공급 4. 바이오스 부팅 5. ....
  • 31. 패키지(package) • 패키지는 클래스나 인터페이스를 묶어주는 워 크스페이스 역할을 한다. • 패키지를 이용하면 인터페이스, 클래스를 묶어 서 모듈로 묶어 줄 수 있다. 예) 패키지 선언방법 package com.pizzastudio; class Test.. { ... } 13년 10월 25일 금요일
  • 33. 클래스 정의 class 키워드와 {, } 를 사용하여 몸체를 지정 몸체에는 필드, 생성자, 메서드를 정의 클래스명은 문자로 시작, 문자와 숫자만 사용 예) public class 클래스명{ 필드선언; 생성자선언; 메서드선언; } 13년 10월 25일 금요일
  • 34. 상속과 인터페이스를 통 한 클래스 정의 class 클래스명 extends 부모클래스명 implements 인터페이스명{ 필드 정의; 생성자 정의; 메서드 정의; } 13년 10월 25일 금요일
  • 35. 클래스 정의(변수선언) 변수선언방법:접근제어자 변수타입 변수명 = 값; 변수 선언위치 : public class VariableTest{ private int count; // 멤버 변수 private static int sum; // 클래스 변수 public int sumCount(){ private int sum = 0; // 로컬 변수 sum = sum + count; return sum; } } 13년 10월 25일 금요일
  • 36. 클래스의 정의 (메서드 정의) • 메서드 정의 방법 접근제어자 반환타입 메서드명(변수타입 변수 명, ...) { ... return 반환값; } 사용예 public void sum(int x, int y){ return x + y; } 13년 10월 25일 금요일
  • 37. 클래스 정의(생성자) • 생성자 정의 방법 public 클래스명(매개변수타입 매개변수,...){ } • 생성자 생성 및 사용예 public Notebook(int cpu, int memory){ } Notebook mybook = new Notebook(); 13년 10월 25일 금요일
  • 38. 메서드에 값 전달 방법 • 값에 의한 전달 void callVal(int p) • 참조에 의한 전달 void callRef(String a) callVal(1); callRef("value"); 13년 10월 25일 금요일
  • 39. 객체의 기본 • 객체의 생성 Computer my = new Computer(1); 1. 선언 : Computer my 2. 생성 : new Computer 3. 초기화 : Computer(1) 4. 할당 : my = new Computer(1); 13년 10월 25일 금요일
  • 40. 객체의 기본(계속) • 객체의 사용방법 생성된객체명.필드명 : d1.name, new Computer().name 메서드 호출방법 생성된객체명.메서드명(인자) : my.getCpu(); 13년 10월 25일 금요일
  • 41. this • this는 생성된 객체 자신을 가리키는 자바의 키워드 • this.필드명 또는 this.메서 드명으로 필드와 메서드 호출 • this(인자...)로 객체 자신의 생성자를 호출할 수 있음 13년 10월 25일 금요일
  • 43. 클래스 변수/메서드 • 클래스 변수와 클래스 메서드는 클래스에서 생성된 모든 객체에서 호출되어도 동일한 값 동일한 결과를 반환하는 메서드이다. • 클래스 변수/메서드 정의 방법 : static int COUNT; static void parseInt(); • 클래스 변수/메서드 사용 방법 : Integer.COUNT, Integer.parseInt(); 13년 10월 25일 금요일
  • 44. 중첩클래스 • 중첩 클래스 정의 : 클래스 내에 클래스를 정 의, 논리적으로 로직을 그룹핑할 목적 또는 정 보 은닉의 목적으로 사용됨 • 종류 : 이너 클래스, 로컬 클래스, 익명 클래스 13년 10월 25일 금요일
  • 45. 이너 클래스 • 이너클래스는 클래스 내, 메서드 바깥에 선언되 는 클래스이고 바깥 클래스 객체 생성 시에 동 시에 생성된다. • 예) class OuterClass{ class InnerClass{ ... } ... } 13년 10월 25일 금요일
  • 46. 로컬 클래스 • 클래스 내부의 특정 블럭(메서드나 블럭) 내에 선언되는 클래스 • 사용예) public class Member{ ... public void validJuminNo(){ class JuminNo{ ... } return new JuminNo(); } 13년 10월 25일 금요일
  • 47. 익명 클래스 • 익명 클래스는 선언장소는 로컬클래스와 동일하 나 클래스의 이름을 사용하지 않는다. • 사용예) public class Hanger{ ... public void print(){ ... Clothes shirths = new Clothes(){ public void printColor(){ ... } } } 13년 10월 25일 금요일
  • 48. Enum 타입 • Enum 타입은 사전에 정의된 상수의 집합과 같 다. Enum을 주로 사용하는 곳은 주, 방위, 색 배 열과 같은 일련의 상수 집합을 사용하는 곳이다. • 사용예)enum Color{ RED, ORAGNE, public YELLOW, BLUE, PURPLE} Color.RED, Color.ORANGE 13년 10월 25일 금요일
  • 50. 인터페이스의 정의 • 자바에서 인터페이스를 정의하기 위해서는 interface 키워드를 사용하여 선언해야 한고 메서 드 내용을 정의하지 말아야 한다. • 사용예) public interface Figure{ public String getName(); public double getArea(); } 13년 10월 25일 금요일
  • 51. 인터페이스 구현 • 자바에서 인터페이스를 구현하기 위해서는 구 현할 클래스에서 implements 키워드로 인터페 이스를 구현해야 한다. 사용예) public class Triangle implements Figure{ ... public String getName() { ... } public dboule getArea() { ... } 13년 10월 25일 금요일
  • 52. 인터페이스의 사용 • 인터페이스를 구현한 객체들은 인터페이스 타 입의 변수에 할당될 수 있다. • 사용예) Figure a = new Triangle(); a.getArea(); 13년 10월 25일 금요일
  • 53. 상속 • 상속은 부모 클래스의 속성을 자식클래스에 물 려줄 수 있는 방법을 제공한다. • 자바의 모든 클래스는 java.lang.Object 클래스 를 상속받고 있다. • 사용예) public class Bmw320d extends Car{ .... 13년 10월 25일 금요일
  • 54. 오버라이딩(Overriding) • 자식 클래스는 부모 클래스의 메서드를 재정의 하여 사용할 수 있다. 이를 오버라이딩 (overriding) 이라고 부른다. • 사용예 public class Bmw320d extends Car{ @Override public void printCarName(){ ... 13년 10월 25일 금요일
  • 55. 다형성(polymorphism) • 사전적 정의 : 같은 종에서 개체가 형태와 형질 등에 대해 다양성을 나타내는 상태 • 자바에서의 의미 : 동일한 부모 클래스를 상속 받은 자식클래스들에서 부모에게 물려받은 공 통 속성이외에 자식클래스만의 다양한 특성을 만들 수 있다. 13년 10월 25일 금요일
  • 56. super • 자식 객체에서 부모 객체에 접근하기 위해서 사용되는 키워드 • 부모 객채 셍성자/메서드 호출 방법 super(인자1, 인자2, ...) super.메서드이름(인자1, 인자2, ...) super(speed, gearType, engineType..) super.print(); 13년 10월 25일 금요일
  • 57. 추상클래스와 메서드 • abstract 키워드를 이용하여 선언하며 추상 클 래스의 일부 클래스는 몸체를 구현할 수도 있 고, 인터페이스 처럼 메서드 선언만 할 수도 있 다. • 추상 클래스를 상속받은 클래스에서 선언받은 클래스를 구현하면 된다. public abstract class Parent{ abstract void print(); 13년 10월 25일 금요일
  • 58. Number와 String 13년 10월 25일 금요일
  • 59. Number클래스 • Boolean, Byte, Character, Float, Integer, Long, Short • System.out.format("%10.2f%n", pi); // ‘ 3.14’ • System.out.println(format("$###,###,###", number)); // $1,234,567,890 • 오토박싱과 언박싱 int a = 1; Integer b = 10; // 오토박싱 System.out.println(b.equals(a)); // 언박싱 13년 10월 25일 금요일
  • 60. String 클래스 • String 클래스는 문자열을 처리할 수 있는 클래스 • 실무에서 가장 많이 사용되는 클래스 13년 10월 25일 금요일 메서드 length indexOf substring replace
  • 61. StringBuilder 클래스 • StringBuilder(CharSequence cs), StringBuilder(int capacity), StringBuilder(String s) • append • insert • delete • replace 13년 10월 25일 금요일
  • 62. Date와 Time 다루기 13년 10월 25일 금요일
  • 63. java.util.Calendar 클래 스 • Calendar 클래스는 시간과 년(YEAR), 월 (MONTH), 일(DAY_OF_MONTH), 시간 (HOUR) 등의 날짜 시간관련 데이터를 다루 기 위한 추상 클래스이다. 이 클래스에서 표현 되는 시간은 GMT 기준으로 1970년 1월 1일 00시 00분 00초 이후의 시간을 밀리세컨드 단 위의 숫자로 표현될 수 있다. • Calendar calendar = new GregorianCalendar(2013,4,20); 13년 10월 25일 금요일
  • 64. 날짜 포멧 • DateFormat 클래스 // Locale KOREAN formatter = DateFormat.getDateInstance(...); today = new Date(); dayStr = formatter.format(today); System.out.println(dayStr); 13년 10월 25일 금요일
  • 65. 날짜 포멧(계속) • SimpleDateFormat String pattern = "서기 yyyy년 MM월 dd일 HH 시 mm분 ss초 "; SimpleDateFormat formatter = new SimpleDateFormat(pattern, Locale.KOREA); String todayStr = formatter.format(today); 13년 10월 25일 금요일
  • 66. 정규식과 플랫폼 환경 13년 10월 25일 금요일
  • 67. 정규식 • 정규식(Regular Expression)은 문자열에서 특 정 단어, 특정 문자의 패턴과 일치하는 문자열 을 찾는 방법을 제공하는 특정 패턴이다. • 패턴 종류 [abc] : a 또는 b 또는 C가 있는 문자열 [^abc] : a, b, c 가 없는 문자열 [a-zA-Z] : a부터 z, A부터 Z가 있는 문자 열 [a-d[m-p]] : a부터 d 또는 m부터 p [a-z&&[def]] : d, e, f 문자 13년 10월 25일 금요일
  • 68. 정규식(계속) • 미리 정의된 패턴 . : 모든 문자 d : 숫자 D : 숫자가 아닌 문자 s : 공백문자 S : 공백이 아닌 문자 w : 알파벳과 숫자 W : 알파벳과 숫자가 아닌 문자 13년 10월 25일 금요일
  • 69. 정규식(계속) • 수량자(정량자) X? : X값이 한번 또는 나타나지 않음 X* : X값이 0번 이상 나타남 X+ : X값이 1번 이상 나타남 X{n} : X값이 n번 이상 나타남 X{n,} : X값이 최소 n 번 이상 나타남 X{n,m} : x값이 최소 n번에서 m번까지 나타남 13년 10월 25일 금요일
  • 70. 정규식(계속) • 정규식 사용방법 Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); 13년 10월 25일 금요일
  • 71. Properties 파일 • Properties 파일은 키와 값 쌍으로 구성되어있 다. log.dir=/log/application_log와 같이 log.dir 이 키(key)이고 /log/application_log가 값이다. • 자바에서는 Properties 객체를 제공한다. prop = new Properties(); prop.load(getClass().getResourceAsStream(". /default.properties")); 13년 10월 25일 금요일
  • 72. 자바의 환경변수 • OS에서는 환경변수를 Properties와 동일한 방식으로 보관하고 있다. • System.getenv() 메서드는 JVM의 환경변수 Map 형식으로 반환한다. 13년 10월 25일 금요일
  • 74. 제네릭 • 제네릭(Generic)은 파라미터의 형식을 미리 정의하는 것이다. • class 클래스명 <T1, T2, ... Tn>{ ... } • 타입파라미터 : T(Type), K(Key), N(Number), E(Element),V(Value), 기타 • Type<String> a = new Type<String>(); • 제네릭 메서드 13년 10월 25일 금요일
  • 75. 타입 추론과 타입추론 • 자바 컴파일러는 메서드 호출 시, 객체 생성 시 에 제네릭 타입을 유추할 수 있다. 추론 알고리 즘은 인자의 타입이나 호출 결과로 반환 되는 값에 의해 결정된다. • 예) public class JukeBox<T extends Number> { ... } JukeBoxDemo.addJukeBox(new Integer(10), list); 13년 10월 25일 금요일
  • 76. 와일드 카드 • 제네릭 코드에서 명시적으로 어떠한 타입의 객체가 들어오는지 모를 경우, ? 기호를 사용하 구분 사용하는 곳 상한와일드카드 <? extends T> 써야하는 곳 하한와일드카드 <? super T> 읽어야 하는 곳 무제한와일드카드 13년 10월 25일 금요일 형태 <?> 쓰거나 읽어야 하는 곳
  • 77. 어노테이션 • 어노테이션은 프로그램에 대한 메타데이터를 제공하는 역할을 한다. 하지만 프로그램의 코 드로서 동작하지는 않는다. • 선언 : public @interface Description { • 사용 : @Description( ... ) public class TestAnnotation { 13년 10월 25일 금요일
  • 80. Set • 정의 : 인터페이스이고 자료를 중복해서 저장 할 수 없는 목록 • 주요 클래스 : TreeSet, HashSet, LinkedHashSet • Collection<Type> list = new HashSet<Type>(); • 주요 메서드 : add, remove, set, get 13년 10월 25일 금요일
  • 81. List • 정의 : 인터페이스이며 중복된 자료를 저장하 는 목록 • 주요 클래스 : ArrayList, LinkedList • List<String> list = new ArrayList<String>(); • 주요 메서드 : get, set, add, remove, indexOf 13년 10월 25일 금요일
  • 82. Queue • 정의 : 선입선출 구조의 자료구조를 제공 • 주요 클래스 : LinkedList • Queue<String> linkedQueue = new LinkedList<String>(); • 주요 메서드 : element, add, peek, poll, offer 13년 10월 25일 금요일
  • 83. Deque • 정의 : queue 자료구조는 한 쪽에서만 입력이 되고 다른 한 쪽에서는 출력만 되는 구조인 반 면에 deque는 양쪽에서 모두 입출력이 가능한 구조이다. • 주요 클래스 : ArrayDeque, LinkedBlockingDeque • 주요 메서드 : addFirst, addLast, pollLast,pollFirst, peekFirst, peekLast 13년 10월 25일 금요일
  • 84. Map • 정의 : 키와 값으로 이루어진 자료구조 • 주요 클래스 : HashMap, TreeMap, LinkedHashMap • 주요 메서드 : put, get, remove, size, keySet, containKey 13년 10월 25일 금요일
  • 86. 예외 • 컴파일 또는 프로그램 실행 도중에 예상치 못 한 데이터가 유입되거나 문제가 발생할 경우 에 발생하는 이벤트 • 예외(Exception)객체에 에러가 발생했을 때 상태와 정보가 저장된다. • 예외가 발생하면 시스템에서 예외를 던진다. • 예외를 처리할 수 있도록 예외를 잡아야 한다. 13년 10월 25일 금요일
  • 87. 예외 처리방법 try{ // 예외가 발생할 것 같은 구문 }catch(Exception1 e1){ // e1라는 이름을 가진 Exception1 객체 }catch(Exception2 e2){ // e2라는 이름을 가진 Exception2 객체 }finally{ // finally 내의 괄호 구문은 무조건 실행 된다. } 13년 10월 25일 금요일
  • 88. 예외 클래스 모든 예외 클래스는 Exception 클래스를 상속받고 있다. Exception 클래스에 서는 getMessage, printStackTrace, toString 메서드 제공 13년 10월 25일 금요일
  • 89. 예외 던지기 public void execute() throws IOException { ... } public void execute(List<String> list){ if(list == null){ throw new ListException(); } ... } 13년 10월 25일 금요일
  • 90. try-resource AutoCloseable를 구현한 클래스에 한하여 사 용 자동으로 리소스를 반환해준다. try(BufferedReader in = new BufferedReader(new FileReader("foo.in"))){ System.out.println(in.readLine()); }catch(Exception e){ } 13년 10월 25일 금요일
  • 91. 사용자 정의 예외 • 사용자 정의 예외를 만들기 위해서 Throwable 을 상속받은 Exception 및 하위 클래스를 상속 받아 만듬 • 예) public class ListException extends RuntimeException { ... } 13년 10월 25일 금요일
  • 93. 프로세스와 쓰레드 • 프로세스 : 독립적인 자원을 가지고 하나의 독 립된 실행단위. 프로세스는 별도의 메모리 공 간을 가지고 있다. • 쓰레드 : 경량 프로세스라고 부르며 별도의 자 원과 메모리 공간을 가지고 있다. 하나의 프로 세스는 하나의 쓰레드를 가지고 있다. 13년 10월 25일 금요일
  • 94. 쓰레드 생성 • Runnable 인터페이스로 쓰레드 구현 • Thread 클래스를 상속받아 쓰레드 구현 • Thread 클래스의 주요 메서드 interrupt() : 쓰레드의 중단 join() : 쓰레드의 대기 13년 10월 25일 금요일
  • 95. 동기화 문제 1. 쓰레드 A : C 변수를 조회한다. => 0 값을 얻는다. 2. 쓰레드 B : C 변수를 조회한다. => 0 값을 얻는다. 3. 쓰레드 A : C 변수에 1을 추가한다 => C 변수에는 1 이 들어있다. 4. 쓰레드 B : C 변수에 1을 뺀다 => C 변수에는 0이 들 어있다. 5. 쓰레드 A : C 변수를 조회한다. => 쓰레드 A는 0을 얻 는다. 13년 10월 25일 금요일
  • 96. synchronized와 기본락 • 쓰레드 간의 간섭과 메모리 불일치 문제 해결 을 위해 synchronized 구문과 메서드를 제공 • public synchronized void increment() {...} • 자바의 모든 객체는 Lock을 가지고 있다. 이를 모니터락 또는 모니터라고 부른다. • 쓰레드에서 객체에 접근하려고 할 때 객체의 모니터락을 획득한 뒤에 객체에 접근한다. 13년 10월 25일 금요일
  • 97. 교착상태,기아상태 • 교착상태(DeadLock)은 두 개 이상의 쓰레드 가 서로 끝나기를 기다리고 있는 상태 • 기아상태(Starvation)는 다수의 쓰레드가 하나 의 자원을 공유할때 하나의 쓰레드가 자원을 점유하고 놔주지 않는 상태 • synchronized 를 이용해서 자원을 동기화할 때 위의 상태에 빠지지 않도록 조심해야함 13년 10월 25일 금요일
  • 98. lock관리 • synchronized(Object) • notify • notifyAll • wait 13년 10월 25일 금요일
  • 99. java.util.concurrent • ReentrantLock • ExecutorService Threadpooling Thread 생성 및 실행 BlockingQueue, ConcurrentHashMap 13년 10월 25일 금요일
  • 100. 기본 I/O와 파일 I/O 13년 10월 25일 금요일
  • 101. 기본 I/O • • 13년 10월 25일 금요일 입력 스트림 : 소스에서 데 이터를 순차적으로 읽는 것 출력 스트림 : 대상에 데이 터를 순차적으로 쓰는 것
  • 102. 바이트,캐릭터,버퍼스트 림 • 바이트 스트림 : 8 바이트 단위로 입/출력하는 스트림, FileInputStream, FileOutputStream • 캐릭터 스트림 : 문자형 데이터타입을 지원하는 스트림, 캐릭터 셋을 설정해야함, FileReader, FileWriter • 버퍼 스트림 : 버퍼를 가진 스트림, BufferReader, BufferWriter, BufferedInputStream, BufferedOutputStream 13년 10월 25일 금요일
  • 103. 콘솔출력 및 포멧팅 • Console console = System.console(); • System.out.format(“ 3 x 4 는 %d 이다”, i); • %[인자번호$][플래그][폭][.정밀도]유형 • System.out.format("%1$+20.5f %n",Math.PI); -> " 13년 10월 25일 금요일 +3.14159"
  • 104. 데이터, 객체 스트림 • • 객체 스트림은 파일 또는 네트워크에 객체를 저장할 수 있는 I/O를 제공해준다. ObjectInputStream, ObjectOutputStream • 13년 10월 25일 금요일 데이터 스트림은 String 타입의 데이터뿐만 아니라 기본형 타입의 값도 다룰 수 있다. DataInputStream, DataOutputStream 직렬화(serialization)는 객체를 저장하기 위해서 복원 가능한 형태의 스트림으로 저장하는 행위를 말한다.
  • 105. nio.Path클래스 • • • • • • 13년 10월 25일 금요일 Path 클래스는 디렉토리와 파일 경로에 대한 정 보를 담고 있다. Path p = Paths.get("/Users/system") p.getName() : Users p.toString() : /Users/system p.getNameCount() : 3 p.subPath(0,1) : Users
  • 106. 디렉토리와 파일 다루기 • Files 클래스는 파일과 디렉토리를 다루는데 유용한 메서드를 제공해주고 있다. • Files.exists, Files.notExists, Files.isWritable, Files.isExecutable, Files.isSameFile • Files.copy, Files.move, Files.readAttribute, Files.getFileStore • Files.createDirectories, Files.newDirectoryStream 13년 10월 25일 금요일
  • 107. 파일에 읽고 쓰기 • Files.readAllBytes, Files.readAllLines, Files.write • Files.newBufferedWriter, Files.newBufferedReader • SeekableByteChannel s = Files.newByteChannel(...) 13년 10월 25일 금요일
  • 108. FileVisitor • FileVisitor는 특정 조건에 맞는 파일 또는 디렉토리 를 추출할 수 있게 해준다. • • • visitFile : 디렉토리 내의 파일이 호출 되었을 때 • visitFileFailed : 디렉토리 내의 파일을 호출 할 수 없 을때 13년 10월 25일 금요일 preVisitDirectory : 디렉토리 내에 들어가기 전에 postVisitDirectory : 디렉토리에서 나올 때, 이 때에 는 하위 디렉토리는 탐색이 끝났다.
  • 110. OSI 7 계층 A컴퓨터 B컴퓨터 Application layer Application layer Presentation layer Presentation layer Session layer Session layer Transport layer Transport layer Network layer Network layer Datalink layer Datalink layer Physical layer Physical layer 13년 10월 25일 금요일
  • 111. TCP와 UDP • TCP : 인터넷 프로토콜(IP)기반으로 동작하며 세션이 유지된 상태로 메시지를 전달 • UDP : 인터넷 프로토콜(IP)기반으로 동작하며 데이터 전송에 대한 신뢰성이 없다. 13년 10월 25일 금요일
  • 112. 포트 • 13년 10월 25일 금요일 포트 : 하나의 물리적 인 커넥션을 여러 개 의 연결로 분할하여 사용할 수 있도록 부 여되는 번호
  • 113. URL 클래스 • URL은 웹페이지의 주소를 의미함 • 자바에서는 손쉽게 웹페이지에 접근할 수 있 도록 URL클래스를 제공 • URL hostURL = new URL("http:// blog.pizzastudio.org/"); • BufferedReader br = new BufferedReader(new InputStreamReader(host.openStream())); 13년 10월 25일 금요일
  • 114. TCP프로그래밍 • 서버와 클라이언트 프로그램 구조 • 서버: server = new ServerSocket(9999); clientSocket = server.accept(); • 클라이언트 : socket = new Socket("localhost", 9999); 13년 10월 25일 금요일
  • 115. UDP 프로그래밍 • UDP는 독립적인 데이터그램 단위로 데이터 를 잘라서 전송한다. 데이터그램이 순서대로 도착할 지에 대한 보장이 없다. • DatagramSocket socket = new DatagramSocket(9998); DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); socket.send(packet); 13년 10월 25일 금요일
  • 117. 데이터베이스 • 자료를 저장하고 관리하기 위한 별도의 시스 템 • 자료저장 방법에 따라 관계형 데이터베이스, 객체형 데이터베이스등이 있으나 현재 관계형 데이터베이스가 가장 널리 사용됨 • 대표적인 제품은 Oracle, MySQL, MS-SQL등 이 있음 13년 10월 25일 금요일
  • 118. 관계형 데이터베이스 • 자료를 저장할 때 테이블 단위로 자료를 저장 함 • 테이블은 행과 열로 구분되어 있는 구조 • SQL이라는 일종의 언어를 통해서 자료를 질 의할 수 있음 • SQL : select * from emp; select * from dept; • select, insert, update, delete, create 13년 10월 25일 금요일
  • 119. JDBC • 데이터베이스에 접근하여 작업할 수 있도록 연결을 제공하는 라이브러리 모음 • 데이터베이스별로 JDBC 드라이버가 존재한 다. • JDBC 인터페이스는 모두 동일하기 때문에 데 이터베이스별로 JDBC를 사용하는 방법은 동 일하다. 13년 10월 25일 금요일
  • 120. Connection • • • jdbc:oracle:thin -> jdbc 드라이버 이름 • • 13년 10월 25일 금요일 Connection con = DriverManager.getConnection("jdbc:oracle:thin: @//localhost:1521/xe","system","manager"); xe -> 오라클 DB의 sid localhost:1521 -> 데이터베이스 서버의 주소와 포 트번호 system, manager -> DB의 아이디와 패스워드
  • 121. Statement와 ResultSet • Statement stmt = con.createStatement(); • ResultSet rs = stmt.executeQuery("select * from emp"); • while(rs.next()){ System.out.println(rs.getString(1) + " "+rs.getString(2)); } • rs.close(); stmt.close(); con.close(); 13년 10월 25일 금요일
  • 122. ResultSet 타입 • 커서의 동작방 식을 지정하거 나 ResultSet의 변경을 데이터 베이스에 직접 반영할 수 있다. 13년 10월 25일 금요일 TYPE_FORWARD_ONLY TYPE_SCROLL_INSENSITIVE TYPE_SCROLL_SENITIVE CONCUR_READ_ONLY CONCUR_UPDATEABLE
  • 123. PreparedStatement • PreparedStatement ps = con.prepareStatement("select * from emp where emp_no = ? "); ps.setInt(1, 258652); rs = ps.executeQuery(); while(rs.next()){ System.out.println(rs.getString(1) + " " + rs.getString(2)); } 13년 10월 25일 금요일
  • 124. RowSet • • 13년 10월 25일 금요일 rowSet = new OracleCachedRowSet(); rowSet.setUrl(dbUrl); rowSet.setUsername(username); rowSet.setPassword(password); rowSet.setCommand("SELECT * FROM EMP"); rowSet.first(); rowSet.updateString("employee_name", "1." + rowSet.getString("employee_name")); ... rowSet.updateRow();
  • 126. JComponent • JComponent -▷ Container -▷ Component • 스윙의 모든 컴포넌트는 JComponent를 상속 받고 있다. • setToolTipText, setBorder, setMinimumSize, 더블 버퍼링, 키 연결, 드래 그 앤드롭 관련 기능 제공 13년 10월 25일 금요일
  • 128. Label, TextField, TextArea • JLabel label = new JLabel("라벨입니다.", JLabel.CENTER); • JTextField field = new JTextField(20); • JTextArea area = new JTextArea(20,10); 13년 10월 25일 금요일
  • 129. Button • JButton button = new JButton("저장"); • JCheckBox krBox = new JCheckBox("한 국"); • JRadioButton krRad = new JRadioButton("한국"); • ButtonGroup group = new ButtonGroup(); • group.add(krRad); 13년 10월 25일 금요일
  • 130. Dialog • • public class DialogExample extends JPanel implements ActionListener { … @Override public void actionPerformed(ActionEvent e) { • 13년 10월 25일 금요일 JOptionPane.showMessageDialog(frame, "다이얼로그 테스트입니다."); 메시지 타입: ERROR_MESSAGE, INFORMATION_MESSSAGE,WARNING_MESSAGE, QUESTION_MESSAGE, PLAIN_MESSAGE
  • 131. Progress monitor • 프로그레스 모니터를 사용하면 다이얼로그에 진행상태를 표시할 수 있다. • ProgressMonitor progressMonitor = new ProgressMonitor(ProgressMonitorExample. this,"Task Number 1 ", "", 0, task.getLengthOfTask()); 13년 10월 25일 금요일
  • 132. Table, Scroll Pane • JTable table = new JTable(data, columnNames); JScrollPane scrollPane = new JScrollPane(table); table.setFillsViewportHeight(true); 13년 10월 25일 금요일
  • 133. ComboBox와 List • JComboBox fruitList = new JComboBox(fruits); • DefaultListModel model = new DefaultListModel(); • JList list = new JList(model); • list.setSelectionMode(ListSelectionModel.SI NGLE_INTERVAL_SELECTION); 13년 10월 25일 금요일
  • 134. 이벤트 처리 pubic class EventExample … implements ActionListener{ // 1. 이벤트 리스너 작성 // 2. 이벤트 리스너에서 이벤트를 받았을 때 처리해 야할 내용을 작성 public void actionPerformed(ActionEvent e){ ... } public void test(){ // 3. 이벤트를 받아야할 컴포넌트에 이벤트 리 스너를 등록한다. btn.addActionListener(this); 13년 10월 25일 금요일
  • 135. 이벤트의 종류 • 캐럿 리스너 • 속성 변경 리스너 • 액션 리스너 • 컨테이너 리스너 • 포커스 리스너 • 아이템 리스너 13년 10월 25일 금요일 • 리스트 선택 리스너 • 마우스 리스너
  • 136. The End 13년 10월 25일 금요일