SlideShare a Scribd company logo
1 of 47
Download to read offline
February 2015
ED1.1
HR Kwon (hungrok@hanmail.net )
IT 강의자료
Java 기본개념 (Basic Concepts)
1
개정이력
 ED 1.0 , January 2015
 ED 1.1 , February 2015, 일부 내용 추가 명기 (Blue word)
2
소개
 소개
1) 객체 지향적 이며, Machine code dependency 가 없는 Programing Language 이다
Virtual Machine (JVM) 에 의하여 Machine code 로 변환이 되어진다.
2) 기본 Package + 확장 Package 로 구성
. Package 란 해당 Class 의 집합물 로서 각 기능 들을 크게 분류하여 일컫는 용어이다 (java.lang, java.util, java.net, java.math,,)
. 기본 Package 란 JVM Provider (SUN-Oracle) 가 제공하는 Package 이다
. 확장 Package 는 예를 들어, 방송용으로 사용하는 OCAP (MHP) 혹은 스마트폰 에서 사용되는 Android Package 를 의미한다
 실행절차
Source
(a.java)
Compiler
(javac)
Byte Code
(a.class)
ByteCode
Verifier
Memory
Class
Loader
Inter
preterCPU
JVM
3
개발환경
 JDK(Java Development Kit) 와 JRE (Java Runtime Environment)
. JRE 는 사전에 해당 Machine 에 Installed 되어야 한다, 설치는 http://java.com/ko/download/” 에서 진행한다
. JDK는 일반적으로 Eclipse IDE 를 사용한다 ( 사용하는 JRE 지정은 Window – Preferences – Java – Installed JRE’s)
. JRE Edition
SE : Standard Edition
ME : Micro Edition (CVM , KVM)
EE : Enterprise Edition
CDC : Connected Device Configuration (FP & PBP )
JDK
JRE
Target OS &
Machine
. 기본 Packages
. JVM
. Library
. Editor
. Java Compiler
. Java Executor , Debugger
. Linux / Window
. ARM / MIPS / Intel
4
JAVA 특징
 객체 지향적 특징
. 상속 (Inheritance) : Class 간 단일상속 (Sub class 는 단 하나의 Super class 만 가진다)
. 다형 성 (Polymorphism) : Method 에 대한 Overloading 및 Overriding 적 특징
. Capsulation : 객체 의 Property 와 메소드 는 Class 내에 숨어있고, Getter 와 Setter 로서 객체는 통제된다.
 일반적 특징
. Multi Thread 를 지원한다
. 자원 해제는 App 이 하는 것 이 아닌, JVM 이 지닌 Garbage Collector 에 의하여 해제된다
. Native Interface 를 지원한다
 Language 적 특징
. 엄격한 Type Check 를 적용한다 (static type checking)
. Security 를 위하여 Pointer 사용이 안 된다
. 예외 (Exception) 처리 구문이 있다 : try{} catch {}
. Method overloading : 같은 Method 가 다양한 인자 를 지닐 수 있도록 다양화
. Class 사용 Pattern : Anonymous Class, Inner Class, Inner Method
 C++ 비교
. C++ 보다는 사용하기 편하고, 완전한 객체지향 이다
. C++ 는 다중상속 가능
5
객체 지향적
 객체 정의
. 이름이 있는 여러 개의 데이터와 그 데이터 조작을 위한 Method 가 하나로 묶인 구조
. 실 세계 영역에 있는 유형적인 것 (정보,물건,사물,개체 ) 과 무형적인 것 (개념,방법) 을 표현한다
 객체 지향적 (C++,Java Script)
. 비 객체 지향적 : 논리를 기반으로 동작을 중시 한다
- Button 을 예로 들면, 사용자의 요청에 의하여 형상 (모양,크기 및 색상) 을 그릴 수 있는 함수 (Function) 가 있다.
해당 함수는 호출되어 지면 그래픽으로 표현되어 보이지만, 눈으로 보이는 것일 뿐 실체적인 것은 없다
. 객체 지향적 : 자료를 기반으로 객체를 중시 한다
- 자료를 모델링 하고 이들 관계를 정의하는 모형 틀 을 지닌다 (class)
- Button 이라는 Instance 객체가 만들어지고, 객체의 Property 를 통하여 형상을 정의 시키고,
객체의 method 를 통하여 형상을 그래픽으로 표현시키고, 객체에 대한 사용자 이벤트를 처리할 수 있다.
App
동작
(Function)
결과
drawButton (type,color,size,text)
test1
App
Instance 객체
(Button)
결과
. new Button
. Properties : type,color,size,text
. Method : draw(), clear()
. Event
test2
Class Button
(객체모형)
6
Class
 정의
. Java 언어의 기본 구조(단위) 로서, 객체를 만들 수 있는 Type (형) 으로서 원형 틀 (원형객체) 역할을 한다
. class 자체 로서는 객체는 아니다.
. new 와 extend 를 통하여 원형객체는 Instance 객체 화 되어지거나 상속 화 되어진다
 Class 의 용도 별 구분
(1) Application 일반용 : Java 로 작성된 일반적인 Application 용도, main() 을 지닌다
(2) Application Applet 용 : Web (HTML) 과 연결되어 실행되는 Application 용도 (ByteCode 가 서버에 존재한다)
(3) 서버용 Servlet : 통상 Web Server 에서 실행된다
(4) TV 방송용 App (Xlet) : MHP, OCAP 표준에 사용되는 Application
(5) 내부 Package 구성용 : Package 업체가 제공하는 JRE 내의 Package 용도
< Application 일반용 >
public class HelloApp {
public static void main(String[] args)
{
System.out.println(“Hello World “) ;
}
}
< Applet 용 >
import java.applet.Applet ;
public class HelloApp extends Applet {
public static void main(String[] args)
{
System.out.println(“Hello World “) ;
}
}
7
Class
 Semantics
. [접근지정자] [final 속성] {class 종류} {class명} [implements] [extends]
. 접근지정자 는 2가지 가 있다 : public 과 비지정 이며, 비지정 은 default 를 의미한다
하나의 java 파일에 한 개 이상의 public class 가 불가능 하다 (Inner class 제외), default class 는 복수 로 가능하다
. final 속성은 상속이 불가능한 최종 구현체 class 임을 의미한다
. Class 종류는 3가지 가 있다 : class, interface, abstract class
. Class 이름은 고유 하여야 한다
. Implements 는 특정 interface 에 대한 구현체 class 임을 명기한다
. Extends 는 동일 종류간 상속 관계를 명기한다 (누가 super class 인가를 지정한다)
(1) Class 간은 단일상속 만이 가능하다
(2) Interface 간은 다중상속 이 가능하다
. 예
public class myClass1
public final class myClass2
public final class myClass3 extends A implements B
public interface myClass4 implements C
public abstract class cmyClass5 extends D
8
Class 내부구성
 Class 의 내부구성
. 4가지 로 분류되며, 선언 시 가장 앞서 접근 지정자 를 지닌다
. Class 멤버 (변수 및 메소드) 는 모든 Instance 객체가 공동으로 사용한다.
. 객체멤버변수 와 멤버 Method 들이 Instance 객체와 상속의 대상이 된다
. 내부구성 예
package a.b.c ; // org.dvb.media
import a.x.y.Test1 ; // 사용 (new) 대상 class , 같은 package 에서는 import 할 필요가 없다
public class Car implement InterfaceCar {
// 1. Class멤버 변수 및 메소드
public static final int classvar1 ; // 상수변수 (상수필드 - static final) , 값은 변경할 수 없다 (ONEDAY = 24)
public static int classvar2 ; // 정적변수 (정적필드 - static ) , 값을 변경할 수 있다
public static int MemberMethod5() {} ; // Static Method
// 2. 객체 멤버변수
public int instvar1 ;
private int instvar2 ;
protected int instvar3 ;
default int instvar4 ;
default final int instvar5 ; // final 멤버변수
// 3. Constructor Method , Instance 객체 생성시 자동으로 호출되는 메소드 이다 , return type 이 없어야 하며, 없어도 가능하다
public Car() {} ; // 일반적인 constructor
private Car() {} ; // 객체생성 (new instance ) 불가 from 다른 class
// 4. 멤버 Method : Method 내부에 Static 변수를 지닐 수 없다
public void MemberMethod1() {} ;
private void MemberMethod2() {} ;
protected void MemberMethod3() {} ;
default void MemberMethod4() {} ;
}
9
Class 내부구성
 Class 의 메모리 공간
. Class 로드, 객체의 생성 에 따라 JVM Heap 공간에 위치한다
. 비 객체 영역을 static area 로 칭하며, static 의미는
전 객체가 공유하는 단 하나의 전역 영역 이며 객체화 대상이 아니고 GC 대상이 아님을 의미한다 (new 없이 Static Method 호출 가능하다)
. 객체영역을 GC area 로 칭하며, 객체의 사용이 완료되면, JVM 에서 소멸을 진행한다
. Method 내부의 지역변수는 Thread stack 영역에 위치한다
Stack 영역이란 지역변수, 매개인자, return 값, return PC (program count) 등 이 위치하는 휘발성 영역이다
public class Test
{
// Class (Static) 멤버
public static final KKK=10 ;
public static abc = 20 ;
public static method1() {}
// 멤버 변수
public int ab1 ;
public int ab2 ;
// 멤버 메소드
public void method2(){
//
}
public void method3() {
int local1 ; // 지역변수
A obj1 = new A ;
}
}
JVM Heap
비 객체 영역
(static area)
(PermGen 영역)
JVM Heap
객체 영역
(GC area)
1) 상수필드, 정적필드 ; Class 로드 시
2) Static Method ByteCode ; Class 로드 시
3) 일반 Method ByteCode ; Method 실행 시
생성된 객체 (객체의 멤버변수)
Access 가능 Access 불가
Thread
Stack 영역
Method 내부(지역) 변수
10
Class 내부구성
 final, static 속성 정리
적용 설명
Final Class . public final class String extends Objects
. 상속이 불가하다 (Sub class 를 지닐 수 없다, final class 를 extends 하면 ERROR)
. java.lang 이 제공하는 내장 Class 는 대부분 final 속성을 지닌다
Method . public final String prn()
. Final method 는 overriding 불가하다, 완전한 구현 Method 임을 암시한다
Variable . public final int abc =10;
. 필드 (상수, 정적) 가 아닌 멤버변수 이다
. 선언 시에 한번만 대입 (assignment) 가능하다
. 멤버변수 이나 상수변수 (constant) 개념 이다
Static Class . public static InnerClassA
. Inner class 에서 static / non-static 속성을 나타낸다
static : Class 멤버 (메소드, 변수) 중에 static 이 있을때 반드시 사용, Static heap 사용
일반 static 메소드 처럼 new 없이 사용 가능하다
non-static : 일반 class 처럼 사용되어 진다. Outer 객체를 생성후에 Inner 객체를 생성한다
Method . public static int method1()
. Class 멤버이다
. Class 로드 시 heap 에 탑재됨으로, new 없이 호출가능 하다
. 멤버변수 나 멤버 Method 를 access 할 수 없다
. 주로 멤버객체변수를 이용하지 않고 단순계산을 지니는 메소드 에 적용된다
Variable . public static int abc =10 ;
. Class 멤버이다
1) 상수변수 (상수필드) : static , 변경 불가능
2) 정적변수 (정적필드) : static final , 변경 가능
. Class 로드 시 heap 에 탑재됨으로, Access 가능하다: myClass.NAME
11
Class 객체화
 객체화 방법
Class 에 대한 객체 생성 방법은 아래와 같은 세가지 방법이 있다
1) new (keyword) 를 통하여 객체생성 : Car mycar1 = new Car(“abc”) ;
2) Literal 적인 방법으로 객체생성 : String mycar2 = “xyz” ;
Literal 적인 방법은 일반적인 Class 는 안되고 (의문임 ?), Primitive data type (String,Integer,Character,Object,,) 들만 가능 하다
3) Class 를 동적으로 Loading 하여 객체 생성방법
. 해당 class 가 local machine 에 존재하지 않고, 서버에 존재하는 경우 이를 불러와 로딩하는 경우
. Class 이름을 모르는 경우 (이름을 어느 객체 로 부터 run-time 에 획득하여)
. Reflect 내장 class 를 이용하여 가능하며, 자세 내용은 Reflect 를 참고 한다
(1) Constructor 가 없는 경우 : Class 객체를 이용한다
(2) Constructor 가 있는 경우 : Class 객체 와 Constructor Reflect class 를 이용한다
public static void DynamicClassLoadTest(){
// Constructor 가 없는 경우
Class obj1 = Class.forName("a.b.c.NoConstructorClass") ;
NoConstructorClass obj2 = (NoConstructorClass) obj1.newInstance() ;
obj2.method1() ;
// Constructor 가 있는 경우
Class obj3 = Class.forName("a.b.c.ConstructorClass") ;
Constructor obj4 = obj3.getConstructor(String.class) ; // Arg.가 String 임으로 이리 지정한다 (하나만 있다고 가정)
ConstructorClass obj5 = (ConstructorClass) obj4.newInstance("Korea") ;
obj5.method1() ;
}
12
Class 객체화
 객체화 new
. extend 는 Class 간 상속관계를 형성 시키며 (Super vs Sub) , 최종적으로 new 를 통하여 객체화 되어진다
. Extend – New Pattern
1) 단일 Class
2) Super Class : 일반
3) Super Class : Abstract
. Extend 와 객체화 를 통하여 Class 의 구성요소는 아래와 같이 공유 및 Instance 된다
Class 구성요소 객체생성 (new) Class 상속(extend)
상수필드, 정적필드 전 객체간 공유 (단 하나) 공유 및 확대 (추가)
객체 멤버 변수 Instance (독립된 멤버변수) 공유 및 확대 (추가)
멤버 메소드 전 객체간 공유 (단 하나) 공유, 확대 및 Overriding (대체)
Class
A Instance 객체
Y
Y = new A
Abstract Class
D
Class
E
Instance 객체
Z
Z = new Eextend D
Class 구성요소
(1) Class 멤버변수 (필드)
(2) 객체 멤버변수
(3) Constructor
(4) Method
Class
B
Class
C
Instance 객체
K
K = new Cextend B
13
Class 객체화
 객체화 Literal 적 방법
. new 를 사용하지 않고 선언 및 초기값을 지정하면 JVM Heap 공간에 잡히는 Instance 객체는 만들어 진다
. new 와 차이점은 동일한 초기값을 지니면 기존의 객체를 동일하게 사용한다
(s7 는 reference 로는 존재하나, 새로운 객체가 아닌 s6 에서 만들어진 객체가 사용된다)
 String 객체에 대하여 new 및 Literal 적용으로 생성 된 객체모습
public class MyApp1
{
public static void main(String[] args)
{
String s1 = "AAA"; // Literal
String s2 ;
String s3 = new String("AAA");
String s4 = new String("AAA");
String s5 = s4 ; // 별도객체 아님
String s6 = “BBB” ; // Literal
String s7 = “BBB” ; // 별도객체 아님
}
} Object os1
Object os3
Object os4
Object os5
JVM Heap
Reference Value
s1 * os1
s2 Null
s3 * os3
s4 * os4
s5 * os4
s6 * os5
s7 * os5
public final class String{
}
Thread Stack
14
Class 유형
 Class 유형 및 semantics
Class 는 아래 세가지 유형으로 구분 할 수 있다
(1) class ; 접근지정자 class class이름 extends A, implement B
(2) abstract class ; 접근지정자 abstract class class이름 extends A, implement B
(3) interface ; 접근지정자 interface 인터페이스이름 extends 상위인터페이스
. extends 는 같은 유형 간 (class 와 class, interface 와 interface 간) 상속 을 의미한다
. implement 는 class 가 적용하는 interface 를 의미한다
 Class 유형별 세부특징 비교
구분 Class Abstract Interface 비고
Instance 객체화 (new) O X X new interface(){} 는 익명 Class Pattern 이지
Interface 에 대한 객체화 의미는 아니다
다중상속 (extend) X X O Interface 가 여러 Interface 를 상속 가능하다
Class 간에는 단일 만 가능하다
Static final (상수변수) O O O
정적변수 O O X
멤버변수 O O X
일반 메소드 O O X
추상 메소드 X O O
15
Class 유형
 접근 지정자
. Class 및 멤버변수 및 멤버 메소드 에 대한 접근속성 (접근 가능여부) 을 가져간다, 특정한 지정이 없으면 default 속성을 지닌다
. 접근 지정자 사용 예
지정자 Same class Same package Universe Sub class 정리
public Yes Yes Yes Yes 어느 class 에서라도 접근이 허용된다
protected Yes Yes No Yes 상속을 하면 동일 Package 가 아니더라도 접근이 허용된다
default Yes Yes No No 동일한 Package 내부 에서만 접근이 허용된다
private Yes No No No 동일한 class 내부 에서만 접근이 허용된다
Constructor 에 이것을 이용하여 객체생성 (new) 불가토록 한다
package a.b.c ;
public class Test1(){
public int var1=1 ;
protected int var2=1 ;
default int var3=1 ;
private int var4=1 ;
}
// 다른 Package 에서 접근
package a.b.k ;
import a.b.c.Test1 ;
public class Test3{
void method1(){
var1 = 10 ;
var2 = 10 ; // ERRROR
var3 = 10 ; // ERROR
var4 = 10 ; // ERROR
}
}
// Sub Class 에서 접근
package a.b.k ;
import a.b.c.Test1 ;
public class Test4 extends Test1{
void method1(){
var1 = 10 ;
var2 = 10 ;
var3 = 10 ; // ERROR
var4 = 10 ; // ERROR
}
}
// 동일 Package 에서 접근
package a.b.c ;
import a.b.c.Test1 ;
public class Test2{
void method1(){
var1 = 10 ;
var2 = 10 ;
var3 = 10 ;
var4 = 10 ; // ERROR
}
}
16
Class 유형
 Abstract class
. 참고 하는 디자인 혹은 모델 개념이다 (추상화)
. 직접 객체를 발생 시킬 필요가 없고, 단지 상속에 의해서 하위 class 만 제어할 목적이다.
. abstract class 내 에서 추상 method 는 반드시 존재 하여야 하며, 상속받는 class 에서 구현 되어야 한다.
. 즉, 공통 부 는 Abstract class 가 선언한 것을 사용하며, 가변 부 (abstract method) 만 sub class 에서 구현하여
class 의 완성을 가져가는 개념이며, 완성된 class 만 Instance 객체화 가 가능하다
Abstract Class
Car
extends Car
Class
Truck
Class
Sedan
new Truck
new Car // 불가 객체
X
객체
Y
Super Class
Sub Class
17
Class 유형
 Abstract class , Override
. Override 란 OOP 가 지향하는 다형 성 의 특징으로, sub class 가 super class 의 메소드 를 대체 하는 것 이다
. Final 로 지정된 속성을 지니는 method 는 override 불가능 하다
. Override 예
public void method1 {} ;
Public void method2 {} ;
Class
C
Abstract Class
B
Abstract Class
A
extends A extends B
public void method1 {} ; // Override method
public void method3 {} ; // 추가된 method
public void method2 {} ; // Override method
public void method3 {} ; // Override method
public void method4 {} ; // 추가된 method
18
Class 유형
 Abstract class
. Template Code
package a.b.c;
public abstract class AbstractClass {
public static final int var1 = 20 ;
protected int var2 ;
public int var3 ;
private int var4 ;
public abstract void method1() ;
public void method2(){}
}
package a.b.c;
public class AbstractExtendsClass extends AbstractClass{
public void method1(){ // Abstract method 의 실제 구현부
}
public void method2(){ // Override Method
}
public void method3(){ // Add method in this class
}
}
package a.b.c;
public class Main{
public static void AbstarctClassTest(){
/* Can't instance as Abstract class
AbstractClass obj1 = new AbstarctClass() ;
*/
AbstractExtendsClass obj2 = new AbstractExtendsClass() ;
obj2.method1();
obj2.method2();
obj2.method3();
}
}
19
Class 유형
 Interface
. 상수필드 와 abstract method 만을 지니며, 실제 구현은 Implement 를 선언한 class 가 적용한다
. 사용 측 (App) 과 구현 측 (기본 Package) 의 약속된 규정 역할을 하는 단순 Interface 이다
. Interface 간 다중상속 이 가능하다
. 특별한 선언이 없어도 Interface 내의 모든 메소드 는 abstract 메소드 이며 모든 변수가 static 상수이다
. Java8 부터 추가된 default keyword : Interface 내의 메소드 를 실제구현 – Interface 는 다중상속이 됨으로, 단일상속 에 대한 확장개념
. 주로 Interface 는 아래와 같이 Handler 와 Listener 용도로 사용된다
. Interface 사용 Pattern
Interface
A
Interface
B
Interface
C
extend A,B
Class
D
implement B,C
Abstract Class
E
Implement C
Interface 의 다중상속 Pattern
일반적인 Interface 의 적용 (하나 이상을 implement 할 수 있다)
Abstract class 도 Interface 를 적용 할 수 있다
Interface
C
App Interface
(Handler)
Class Interface
(Listener)
App
Notify Event / Data
20
Class 유형
 Interface Class
. 선언에 상관없이 모든 변수 는 static final 이며, 모든 method 는 abstract 이다
. Template code
package a.b.c;
public interface InterfaceClass {
public static final int KKA = 20 ;
public static int KKB = 20 ; // this is also static final
public int KKC = 20 ; // this is also static final
public abstract void method1() ;
public void method2() ; // this is also abstract
}
package a.b.c;
public class InterfaceImplementClass implements InterfaceClass {
public int var1 ;
public int var2 ;
public void method1(){
// 실제구현 method
}
public void method2(){
/* can’t access as static final
KKA = 10 ;
KKB = 10 ;
KKC = 10 ;
*/
}
}
21
Class 유형
 Abstract interface
stackoverflow.com 에서 찾은 내용은 아래 와 같이 두 가지로 정의된다
1) Every interface is implicitly abstract. This modifier is obsolete and should not be used in new programs.
2) Be aware that in Spring it has non academic meaning.
The abstract interface is a warning to the developer not to use it for @Autowired.
I hope that spring/eclipse @Autowired will look at this attribute and warn/fail about usages of such.
A real example: @Service proxy under @Transnational to a @Repository need to use same basic methods however they should use
different interfaces that extends this abstract interface due to @Autowired. (I call this XXXSpec interface)
22
Class 유형
 Abstract class , Override
. Override 란 sub class 가 super class 의 메소드 를 대체 하는 것 이다
 객체의 지칭 자 : this , super
. This : Instance 객체 자신을 지칭한다
. Super : extend 시 Super class 의 멤버 변수 혹은 멤버 method 를 지칭한다
생성자 (Constructor) 에서 super 를 호출하면 Super class 의 생성자 를 호출함
public void method1 {} ;
Public void method2 {} ;
Class
C
Abstract Class
B
Abstract Class
A
extends A extends B
public void method1 {} ;
public void method3 {} ;
public void method2 {} ;
public void method4 {} ;
method2 를 대체한다method1 을 대체한다
Public
public void method1 {} ;
Public void method2 {} ;
Class
B
Abstract Class
A
extends A
public void method1 {} ;
public void method3 {
method1() ; // Class B 의 mthod1() 이 호출
this.method1() ; // Class B 의 mthod1() 이 호출
super.method1() ; // Class A 의 mthod1() 이 호출
}
method1 을 대체한다
23
Class 사용 Pattern
 현실구현 일반적 모습
// Notify Event at Class K
public void postEvent(Object listener, Object evt) {
if( evt instanceof ServiceContextEvent ) {
((ServiceContextListener)listener).receiveServiceContextEvent((ServiceContextEvent)evt);
}
}
App
Class
Main()
Interface A
(Handler)
Class
K
Interface B
(Listener)
Notify EventImplement A
Class
B
Abstract
Class A
JNI
Import B // for new B
Import C // for new C
Extends A
Action (gfx, file, socket)
Implement B
k = new K
k.addListener()
k.Method()
Class
C
Event
Native
24
Class 사용 Pattern
 사용 Pattern
(1) 하나 이상의 Class
(2) Inner Class
(3) 지역 (Local) Class : Method 내부의 Class 로서, Method 내부의 지역변수 와 동일한 성격을 지닌다
(4) 익명 (Anonymous) Class : Method 내부의 Class 이지만 익명을 지닌다
 하나 이상의 Class
. 일반적으로 Java 파일 하나에 하나의 Public class 를 지닌다
. 하나의 Public class 와 여러 개의 default class 를 지니는 것도 가능하지만, 이를 대체 하는것이 Inner class 이다
Class 간 멤버접근이 불가능 한 특징이며, 이를 보완 하는것이 Inner class 사용 방법 이다
package a.b.c;
public class OuterClass {
public int vara = 10 ;
private int varb = 10 ;
// varx = 20 ; // can't access
}
/* only one public class should be exist
public class OuterClass2 {
}
* /
class OuterClass3{
public int varx = 10 ;
private int vary = 10 ;
// vara = 20 ; // can't access
}
25
Class 사용 Pattern
 Inner Class
. Class 내부에 Class 를 두는 경우를 의미한다
. 목적은 편의성 과 단순성 을 위함이다 : 간단한 class 를 여러 파일에 두지 않고 Code 의 단순성을 가져간다
. 두 가지 로 분류 할 수 있다
(1) Non-static inner class
(2) static inner class
. Inner class 내부에서 상속은 static 은 static 간 , non-static 은 non-static 간에 만 가능하다
구분 특징
Non-static
Inner class
. Inner 클래스의 객체를 만들기 위해서는 반드시 Outer클래스의 객체를 생성하고 이를 통해 Inner클래스를 만들어야함
OuterClass.InnerA obj1 = new OuterClass().new InnerA();
. Inner클래스는 Outer클래스의 맴버에 접근 할 수 있지만 Outer클래스는 Inner클래스의 멤버에 직접 접근 할 수 없다.
Static
Inner class
. Static 멤버 (변수 혹은 메소드) 가 있으면 반드시 static 으로 지정 되어야 한다
. Static Heap 영역에 위치 함으로, Outer클래스의 객체 생성 없이 바로 객체 생성이 가능
OuterClass.InnerD.method1();
. Inner 클래스에서는 Outer클래스에 정의된 멤버중 에 static 멤버만 직접 접근이 가능.
Main
Class
Non-static
InnerA Class
Outer
Class
Static
InnerD Class
직접 access 가능
OuterClass.InnerA obj1 = new OuterClass().new InnerA();
Obj1.method1() ;
OuterClass.InnerD.method1();
26
Class 사용 Pattern
 Inner Class 예제 Code package a.b.c;
public class OuterClass {
public int var1 = 10 ;
public void outMethod1() {
}
public void outMethod2() {
// varx = 20 ; // can't access
InnerA obj1 = new InnerA() ;
}
public class InnerA{
public int varx = 10 ;
/* Can't here as static member
public static int var1 = 10 ;
public static void method2(){
*/
public void method1(){
var1 = 20 ; // can access
outMethod1() ; // can access
}
}
public class InnerB extends InnerA{
}
/* Can't extends between static and non-static
public static class InnerC extends InnerB{ }
*/
public static class InnerD {
public static void method1(){
// var1 = 20 ; // can't access
// outMethod1() ; // can't access
}
}
public static class InnerE extends InnerD{}
}
27
Class 사용 Pattern
 익명 (Anonymous) Class
. Method 내부의 지역 Class 로서 선언이 보이지 않고, new 와 함께 임시 class 가 생성된다
. 주로 Interface 인 Listener 에 대한 적용 시 사용되며,
Implement 적용 class 를 별도로 만들지 않고 Interface 를 직접 new 하여 임시 class 를 만들어서 사용하는 방법 이다
. 목적은 간편성을 위함이다
. Template Code
package a.b.c;
public interface InterfaceClass {
public static final int KKA = 20 ;
public static int KKB = 20 ; // this is also static final
public int KKC = 20 ; // this is also static final
public abstract void method1() ;
public void method2() ; // this is also abstract
}
package a.b.c;
public class AnonymousClass {
public void method9(){
/* This is Anonymous class */
InterfaceClass obj1 = new InterfaceClass(){
public void method1(){}
public void method2(){}
}; // 반드시 ; 가 붙어야 한다
}
}
28
Class 사용 Pattern
 싱글톤 (Singleton) 객체
. 객체 지향적 일 지라도 특정한 것 은 응용 단에서 단 하나의 객체만으로 이용 가능한 객체 형태를 의미한다
. 예를 들어, HW 자원이 하나인 Tuner 에 대한 객체는 하나만 있어도 객체적 의미를 다하는 것이다
. 일반적으로 사용자는 getInstance 라는 메소드를 통하여 Instance 객체를 얻어간다
. new 를 못하게 하도록 Constructor 를 Private 으로 지정한다 - new 를 하면 Exception 이 발생한다
< 고전적인 방법 >
public class ClassicSingleton {
private static ClassicSingleton instance = null;
protected ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
< Private Constructor 를 이용하는 방법 >
package a.b.c;
public class SingletoneClass {
private static SingletoneClass stc = new SingletoneClass() ;
// To set as private, Not to allow new instance from other class
private SingletoneClass(){
System.out.printf("Instancing SingletoneClass n") ;
}
// Need static to call without new instance
public static SingletoneClass getInstance(){
return stc ;
}
}
29
Class 사용 Pattern
 javax.tv.service 의 ServiceContext 사례
. ServiceContext 는 특정한 사용자 서비스 (예. Watch TV Main, Watch TV PIP) 를 위한 Context 객체로 사용되며
아래 그림은 SvcContext 객체를 얻기 위한 과정을 표현한다
. SvcContext 객체의 select Method 를 이용하여 특정 Program 을 선택한다
Abstract Class
SvcContextFactory
Abstract Class
SvcContextFactoryExt
Class
SvcContextFactoryImpl
extends
extends
Interface
SvcContext
Interface
DvbSvcContext
Interface
SvcContextExt
Class
SvcContextImpl
Interface
DVRSvcContextExt
Class
DVRSvcContextImpl
implements
implements
extends
extends
extends extends
< Application >
// Step1. Service 객체를 얻는다
// Step2. ServiceContext 객체를 얻는다
scf = ServiceContextFactory.getInstance() ;
sc = scf.createServiceContext() ;
// Step3. 해당 Service 에 대하여 선택을 요청한다
sc.addListener(new SeriviceContextListener()) ;
sc.select (Service) ; // Or Locator
new 를 사용하지 않고
객체생성방법 (3) 으로
객체를 생성한다
Interface
SvcContextListener
30
Java.lang Class
 Primitive Data Type Class
. Variable 에 대한 Primitive Data Type 도 Class 모형을 지니는 객체이다
Java.lang
Class
Class 형태 주요 Method
Boolean public final class Boolean implements java.io.Serializable
Character public final class Character implements java.io.Serializable, java.lang.Comparable
Byte
Short
Integer
Long
Float
Double
public final class Byte extends java.lang.Number implements java.lang.Comparable
public final class Short extends java.lang.Number implements java.lang.Comparable
public final class Integer extends java.lang.Number implements java.lang.Comparable
public final class Long extends java.lang.Number implements java.lang.Comparable
public final class Float extends java.lang.Number implements java.lang.Comparable
public final class Double extends java.lang.Number implements java.lang.Comparable
parseByte
parseShort
parseInt
parseLong
parseFloat
parseDouble
String public final class String implements java.io.Serializable, java.lang.Comparable,
java.lang.CharSequence
length, charAt, getChars, getBytes
compareTo, concat, replace
toUpperCase, toLowerCase,
Class public final class Class implements java.io.Serializable forName, getField, getMethod,
getConstructor
getDeclaredMethod
newInstance
Object public class Object finalize, notify, wait
31
Java.lang Class
 Primitive Data 객체 Array 만들기
. 세가지 방법으로 선언한다 , 초기화 값에 의하여 size 가 정해 지거나 명시적으로 size 를 정한다
. [] 위치는 Data type 에 있어도 무방하다 : int ar1[] == int[] ar1
. Reflect Class 를 이용하여 생성하는 방법도 있다 라는 것을 참고 바란다 : Array.newInstance
public static void ArrayTest(){
int ar1[] = {0,1,2,3,4,5} ; // The size must be 6 by init value
int ar2[] = new int[] {0,1,2,3} ; // The size must be 4 by init value
int ar3[] = new int[5] ; // The size must be 5
// int ar4[] ; // This is not allowed as init value or size is not determined
System.out.printf("ar1=%d, ar2=%d,ar3=%d n",ar1.length,ar2.length,ar3.length) ;
int ar5[][] = { {1,2},{1,2} } ; // The size must be 2 by init value
int ar6[][] = new int[10][10] ; // The size must be 10
System.out.printf("ar5=%d, ar6=%d n",ar5.length,ar6.length) ;
}
32
Java.lang Class
 Reflect Class
. 해당 class 의 구성 요소를 조사 하거나 변경 하고자 하는 목적이다
. 이를 이용하여 동적 객체 생성에 활용을 할 수 있다
. 실제 자바빈 에서는 Method 의 이름이 실행시간에 주어짐으로 Reflect class 를 활용하여야 한다
Java.lang.reflect
Class
Class 형태 주요 Method
Array public final class Array newInstance
Set,Get
Constructor public final class Constructor extends Accessible Object implements Member GetName, getDeclaringClass
newInstance
getExceptionTypes
getParameterTypes
Field public final class Field extends Accessible Object implements Member getName, getType
getDeclaringClass
Method public final class Method extends Accessible Object implements Member getName, getReturnType
getDeclaringClass
getExceptionTypes
getParameterTypes
33
Java.lang Class (Object)
 Object Class
. 모든 Class 는 Super Class 에 대한 extends 지정이 없다면, java.lang.Object class 를 자동 상속하게 되어있다.
Object class 가 제공하는 Method 를 이용하여 객체를 관리 하는데 사용하는 목적이다
Method 설명 비고
boolean equals(Object obj) 두 개 의 객체가 같은지 비교한다
String toString() 현재 객체의 문자열을 얻는다
protected Object clone() 객체를 복사 시킨다
protected void finalize() GC 직전에 resource 를 정리하는 목적이다 Finalize Thread 가 호출
Class getClass() 객체의 Class 형을 얻는다
int hashCode() 객체의 Code 값을 얻는다
void notify() Wait 된 thread 실행재개를 요청한다
void notifyAll() Wait 된 모든 thread 실행재개를 요청한다
void wait()
void wait(long timeout)
void wait(long timeout, int nanos)
Thread 를 일시적으로 중지 시킨다
Class
Object
Abstract Class
A
extends Object Class
B
extends A
34
Java.lang Class (Exception)
 Exception Class
. 모든 Exception (xxxException ) 종류 들을 객체로 관리한다 (Class 가 있고 객체화 되어져서 사용된다)
. Throw keyword 를 통하여 exception 을 delivery 한다
public class Test1{
public void method1(){
Test2 obj = new Test2() ;
try{
obj.method2() ;
}
catch (IOException e){
String str = e.getMessage() ;
}
}
}
public class Test2{
public void method2() throws IOException {
// IOException 객체를 생성하고 delivery 한다
throw new IOException() ;
}
}
public class IOException extends Exception
{
public IOException()
{ super();
}
public IOException(String s)
{ super(s);
}
}
Exception 전달
객체 Class
< java.lang 의Exception 종류 들 >
NullPointerException NoSuchMethodException
NoSuchFieldException ArithmeticException
ArrayIndexOutOfBoundException ArrayStoreException
NegativeArraySizeException ClassCastException
ClassNotFoundException CloneNotSupportedException
InterruptedException IllegalAccessException
IllegalArgumentException IllegalMonitorStateException
IllegalStateException IllegaThreadlStateException
IndexOutOfBoundException InstantiationException
NumberFormatException RuntimeException
SecurityException StringIndexOutOfBoundException
35
Java.lang Class (Thread)
 Thread Class (java.lang.thread)
. Multi Thread 를 구현하는 객체이다
. Multi Thread 란 Kernel 의 Scheduler에 의하여 Code 의 Context Cycle (execution-waiting-ready) 이 실행되는 것을 말한다
. Execution 스케쥴링 적용에는 시 분할적인 개념이 적용된다
 Multi Thread 적용 두 가지 방법
1) 실행 Class 가 Thread class 를 상속하여 (extend) 사용
2) 실행 Class 가 Runnable class 를 Implement 하여 사용 하는 방법 : Thread 를 상속하지 않고 다른 Class 를 상속하는 경우
Execution
Ready Waiting /
Blocking
Signal / Notify
Wait, Sleep, Sync
public class 실행A extends Thread{
public void run(){
// Code
}
}
public class 실행B extends ABC implements Runnable{
public void run(){
// Code
}
}
public class App{
public static void main(String args[]){
Thread thread1 = new 실행A ;
thread1.start() ;
}
}
public class App{
public static void main(String args[]){
실행B obj = new 실행B ;
Thread thread2 = new Thread(obj) ;
thread2.start() ;
}
}
36
내장 Class (Thread)
 Thread Class (java.lang.thread)
. main() 에서 실행 Class 에 대하여 객체화 및 start 를 진행한다
. 실행 Class 는 Thread 를 상속 받아야 하며, 반드시 run() 메소드 로 실행 context 가 적용 되어야 한다
. Thread Class 는 Runnable interface 를 implement 하고 있다
public class App{
public static void main(String args[]){
Thread thread1 = new 실행A ;
Thread thread2 = new 실행B ;
Thread thread3 = new 실행C ;
thread1.start() ;
thread2.start() ;
thread3.start() ;
}
}
App Class
main()
실행A Class
run()
실행B Class
run()
실행C Class
run()
Class
Thread
Interface
Runnable
implementsextends Thread
extends Thread
extends Thread
public class 실행A extends Thread{
public void run(){
// Code
}
}
public class 실행B extends Thread{
public void run(){
// Code
}
}
public class 실행C extends Thread{
public void run(){
// Code
}
}
37
내장 Class (Thread)
 Thread 간 상호동작
1) Shared Memory 기법 : 각 thread 의 멤버변수를 동일한 Object 으로 배정하여 관리한다
2) Critical Section 의 동기화 : synchronized KeyWord 를 사용하여 동기화 Block, 동기화 Method 를 적용 – 상호배제 적용
public class SharedMemory
{
public int msg ;
public int state ;
}
public class Test1 extends Thread
{
SharedMemory sm ;
}
public class Test2 extends Thread
{
SharedMemory sm ;
}
public class MyApp2
{
public static void main(String[] args)
{
Test1 test1 = new Test1 ;
Test2 test2 = new Test2 ;
SharedMemory smo = new SharedMemory() ;
test1.sm = smo ;
test2.sm = smo ;
}
}
< 동기화 Block >
public class Test1 extends Thread
{
SharedMemory sm ;
public void run(){
synchronized (sm){ // Thread 간 같은객체
// Code
}
}
}
< 동기화 Method >
synchronized void SyncMethod()
{
// Code
}
38
내장 Class (Thread)
 Thread 간 상호동작
3) Scheduling Event : Wait, Notify
. Synchronized 를 이용하여 Thread 간 동일 한 객체를 사용 하여야 한다
public class Test1 extends Thread
{
SharedMemory sm ;
public void run(){
synchronized (sm){ // 같은객체
sm.notify() ;
}
}
}
public class Test2 extends Thread
{
SharedMemory sm ;
public void run(){
synchronized (sm){ // 같은객체
sm.wait() ;
}
}
}
Wait 로 Test2 는 Pending 으로 들어가고
Notify 로 Test2 를 wake up 시킨다
39
내장 Class (Thread)
 Thread Class (java.lang.thread)
. Thread class 가 제공하는 Method 내역
Thread Class Method 설명 비고
public void start()
public void run()
public State getState()
public final void join()
Thread 시작을 요청한다
개별 Thread 에서 Overriding 대상이다
RUNNABLE, WAITING, TIMED_WAITING, BLOCKED
A 스레드가 B 스레드를 시작시켰을 때 A 스레드는 B 스레드의 실행이
완전히 끝날 때 까지 기다리는 목적이다
public static void yield()
public static void sleep()
높은 Priority 를 지닌 Thread 에게 Execution 을 잠시 양보
특정시간 동안 TIMED_WAITING 상태로 진입을 요청한다
public final void setPriority()
public final int getPriority()
public final void setName()
public final java.lang.String getName()
스케쥴링 우선순위를 지정한다
Thread 이름을 지정한다
public void interrupt()
public static boolean interrupted()
public boolean isInterrupted()
Sleep 상태 일 경우, sleep 에서 깨어나면 InterruptException 을 발생요청
public void destroy()
public final boolean isAlive()
Thread 객체를 폐기한다
public static void dumpStack() Thread stack 을 Dump 한다 (디버깅 목적)
40
JVM GC
 GC (Garbage Collector)
. JVM Heap 은 시스템 메모리와는 별도로 JVM 에 의하여 관리되는 영역이다 (JVM 시작 시 size 가 주어진다)
. Object 생성시 각종 data 의 거주공간 이다
. JVM 에 의하여 GC (free 행위) 가 진행되며, 아래와 같이 두 가지 GC 방법이 있다
(1) JVM 의 내부 Thread 에 의하여 점진적으로 해제처리
(2) 강제 요청에 의하여 (System.gc())
. GC 는 아래와 같이 두 가지 공간으로 관리된다 (JVM 시작 시 Minor GC 주기 가 지정되며, default 4분이다)
. 실제 사용시 아래와 같은 Pattern 을 보인다
몇 차례의
GC 에도
남아있는
Object
Old GenYoung Gen
new Object
Minor GC 대상 Major GC 대상
시간
Heap Free
41
JVM GC
 Finalizer
. Object 생성시 Finalizer 를 상속하는 객체는 자동으로 Finalizer 에 대하여 Reference 를 생성하고 Finalizer Queue 에 본인을 등록한다
. Finalizer 는 비 주기적으로 Queue 에 있는 객체를 검사하여 Queue 에 등록된 객체의 Reference 가
Finalizer 이외에는 없는지 확인한다
. 없다면, Object 의 finalize() 를 호출하고, 종료 후 Finalizer 가 가리키고 있는 해당객체의 Reference 를 끓게 된다.
Class
A
Object
A1
Object
A2
Object
A3
Object
B1
Object
B2
Object
B3
Class
B
JVM Heapreference
new A
new B
Finalize
Method
Finalize
Thread
GC
no reference
then free
reference
No
Reference
대상등록
Still Alive
finalize()
NO
( Finalizer 와 상관없이
GC 의 관리대상)
GC 의 관리대상
42
JVM JNI
 Java Native Interface
 Call Native Function From Class
 Call Method From Native
. Jmethod_list.def 파일에 method 를 등록 하여야 한다
Class JVM JNI
Interpreter.c
Native
Function
public class Car{
// 특정한 define 없이 class 에서 아래와 같이 호출만 한다
private native void Nfunction1() ;
public Method1(){
Nfunction1() ;
}
}
JNIEXPORT void JNICALL PackageName_ClassName_Nfunction1(){
;
}
// Function 이름은 Package 와 Class Name 을 포함 하여야 한다
// Arguments : (JNIEnv, jObject, arg1, arg2,,)
Native
Function
Java Bridge Class
Method()
Call<type>Method
VMI_BridgeCall
Jmethod_list.def
JVM
< Object 획득 >
jobjectArray = new ObjectArray ;
Jobject = new Object ;
jbyteArray = new ByteArray ;
jstring = new StringUTF ;
43
JVM JNI
 Event or Result from Native
Class
A
Java BridgeNative
Function
startMonitor() // for Event
realRequest() // for Result
VMI_BridgePostEvent
VMI_BridgePostResult
Event Handler
Request Handler
Class
A
postEvent
notifyResult
44
Language Feature
 KeyWord
. KwyWord 란 : 언어에서 사용랄 목적으로 이미 예약해 놓은 단어 들
. Class 나 멤버변수 및 멤버 메소드 이름으로 사용 할 수 없다
분류 종류 비고
Package package, import
Class 종류
Class 및 멤버 Method 속성
Class 및 멤버 변수, Method 접근 지정자
JNI Method
class, abstract, interface
final, static
public, private, protected, default
native
객체화 및 상속
객체 지칭
모객체 여부
new, extends, implements
this, super
instanceof
Exception 처리
Multi Thread Sync 처리
throw, throws
synchronzed
기타 void, const, return, volatile, transient
Variable type (primitive) boolean, char, byte, short, int, long, float, double 객체가 아님
Try & Catch try, catch, finally
조건문 , 반복문 for, if, else, do, while, switch, case, continue, goto, break
45
Language Feature
 7.0 에서 적용된 Feature
(1) Null-safe method invocation : Null check 를 위한 coding 방법을 macro 화
(2) String in Switch statements : 원시형 (int,short,char) varaible type 만 가능에서 string 도 가능하도록 , code 용이성
(3) Multi-exception catch : 다중 catch 에 대한 one line 가능
(4) Bracket notation for collection ; 선언 과 동시에 초기화 가능토록
(5) ForkJoinFramework ; 병렬처리 (multi procoessor)
< Multi-exception catch >
// Old style
try {
...... // IO 작업
} catch( IOException e ) {
e.printStacktrace();
} catch( Exception e2 ) [
System.out.println(" Exception : " + e2);
}
// New style
try {
block of statement
}
catch( IOException e | Exception e2 ) {
block of statement
}
< Null-safe method invocation >
// Old style
public String getPostcode( Person person ) {
if( person != null )
Address address = person.getAddress();
if( address != null )
return address.getPostcode();
return null;
}
// New style
public String getPostcode( Person person ) {
return person?.getAddress()?.getPostcode();
}
< Bracket notation for collection >
// Old style
Collection<String> c = new ArrayList();
c.add("one");
c.add("two");
c.add("three");
// New style
Collection<String> c = new ArrayList {"one", "two", "three"};
46
Language Feature
 Collection
. Collection 이란 배열을 통해 연속된 공간에 Data 를 수집하는 여러 종류의 객체들을 말한다
. java.lang.utilty 하부에 Class 가 존재한다 (java.lang 이하는 Import 를 하지 않아도 된다)
. 사용 용도에 따라 4 가지로 분류된다
(1) Set 계열 : HashSet , 순서 없고 중복불허
(2) List 계열 : ArrayList, Vector , 순서 있고 (index) 중복허용, Vector 는 sync 사용, ArrayList 는 sync 미 사용
(3) Map 계열 : HashMap, HashTable , key 와 value 가 한 쌍 , HashMap 은 null 허용, HashTable 은 null 미허용
(4) Queue : LinkedList
< HashTable  Enumber  String >
HashTable ht new HashTable = {} ;
ht.put (“a1”,”abc”) ;
ht.put (“a2”,”def”) ;
ht.put (“a3”,”ghi”) ;
Enumeration keys = ht.keys() ;
Enumeration values = ht.elements() ;
keys.hasMoreElements() ; // boolean
String key = keys.nextElements() ;
value = ht.get(key) ;

More Related Content

What's hot

파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
Yong Joon Moon
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
knight1128
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
Daum DNA
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 

What's hot (20)

Java in 2 hours
Java in 2 hoursJava in 2 hours
Java in 2 hours
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012좌충우돌 ORM 개발기 | Devon 2012
좌충우돌 ORM 개발기 | Devon 2012
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
Java class
Java classJava class
Java class
 
Java extends
Java extendsJava extends
Java extends
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
자바 테스트 자동화
자바 테스트 자동화자바 테스트 자동화
자바 테스트 자동화
 
Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조Ksug2015 - JPA3, JPA 내부구조
Ksug2015 - JPA3, JPA 내부구조
 

Viewers also liked

java lang
java langjava lang
java lang
nurma
 
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
INSIGHT FORENSIC
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
흥래 김
 

Viewers also liked (20)

java lang
java langjava lang
java lang
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 
Java for android
Java for androidJava for android
Java for android
 
3. stream api
3. stream api3. stream api
3. stream api
 
Java API, Exceptions and IO
Java API, Exceptions and IOJava API, Exceptions and IO
Java API, Exceptions and IO
 
(120616) #fitalk web browser forensics - part iii
(120616) #fitalk   web browser forensics - part iii(120616) #fitalk   web browser forensics - part iii
(120616) #fitalk web browser forensics - part iii
 
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
제5회인터넷리더십프로그램_왕초보를 위한 트위터 완벽 활용_정진호
 
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
비영리 사업에서 꼭 필요한 인터넷 도구 (유승철)
 
Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?Een digitale bibliotheek of alleen Google?
Een digitale bibliotheek of alleen Google?
 
IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10IT 일반기술 강의자료_ed10
IT 일반기술 강의자료_ed10
 
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
2013 꿈다락 토요문화학교 유스보이스 8경 잡지만들기 결과물 - Case
 
Java programming language
Java programming languageJava programming language
Java programming language
 
(150124) #fitalk advanced $usn jrnl forensics (english)
(150124) #fitalk   advanced $usn jrnl forensics (english)(150124) #fitalk   advanced $usn jrnl forensics (english)
(150124) #fitalk advanced $usn jrnl forensics (english)
 
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
(140118) #fitalk   detection of anti-forensics artifacts using ioa fs(140118) #fitalk   detection of anti-forensics artifacts using ioa fs
(140118) #fitalk detection of anti-forensics artifacts using ioa fs
 
(150124) #fitalk advanced $usn jrnl forensics (korean)
(150124) #fitalk   advanced $usn jrnl forensics (korean)(150124) #fitalk   advanced $usn jrnl forensics (korean)
(150124) #fitalk advanced $usn jrnl forensics (korean)
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
 
Java, android 스터티10
Java, android 스터티10Java, android 스터티10
Java, android 스터티10
 

Similar to Java 강의자료 ed11

SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
Sangmin Lee
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
jinho park
 
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
iamhjoo (송형주)
 
9 object class
9 object class9 object class
9 object class
웅식 전
 
Design patterns
Design patternsDesign patterns
Design patterns
df
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
재정 이
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
Cosmos Shin
 

Similar to Java 강의자료 ed11 (20)

Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8SpringCamp 2013 : About Jdk8
SpringCamp 2013 : About Jdk8
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
Java script
Java scriptJava script
Java script
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
 
9 object class
9 object class9 object class
9 object class
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 기초
Java 기초Java 기초
Java 기초
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
 
Design patterns
Design patternsDesign patterns
Design patterns
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기TDD.JUnit.조금더.알기
TDD.JUnit.조금더.알기
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 

Java 강의자료 ed11

  • 1. February 2015 ED1.1 HR Kwon (hungrok@hanmail.net ) IT 강의자료 Java 기본개념 (Basic Concepts)
  • 2. 1 개정이력  ED 1.0 , January 2015  ED 1.1 , February 2015, 일부 내용 추가 명기 (Blue word)
  • 3. 2 소개  소개 1) 객체 지향적 이며, Machine code dependency 가 없는 Programing Language 이다 Virtual Machine (JVM) 에 의하여 Machine code 로 변환이 되어진다. 2) 기본 Package + 확장 Package 로 구성 . Package 란 해당 Class 의 집합물 로서 각 기능 들을 크게 분류하여 일컫는 용어이다 (java.lang, java.util, java.net, java.math,,) . 기본 Package 란 JVM Provider (SUN-Oracle) 가 제공하는 Package 이다 . 확장 Package 는 예를 들어, 방송용으로 사용하는 OCAP (MHP) 혹은 스마트폰 에서 사용되는 Android Package 를 의미한다  실행절차 Source (a.java) Compiler (javac) Byte Code (a.class) ByteCode Verifier Memory Class Loader Inter preterCPU JVM
  • 4. 3 개발환경  JDK(Java Development Kit) 와 JRE (Java Runtime Environment) . JRE 는 사전에 해당 Machine 에 Installed 되어야 한다, 설치는 http://java.com/ko/download/” 에서 진행한다 . JDK는 일반적으로 Eclipse IDE 를 사용한다 ( 사용하는 JRE 지정은 Window – Preferences – Java – Installed JRE’s) . JRE Edition SE : Standard Edition ME : Micro Edition (CVM , KVM) EE : Enterprise Edition CDC : Connected Device Configuration (FP & PBP ) JDK JRE Target OS & Machine . 기본 Packages . JVM . Library . Editor . Java Compiler . Java Executor , Debugger . Linux / Window . ARM / MIPS / Intel
  • 5. 4 JAVA 특징  객체 지향적 특징 . 상속 (Inheritance) : Class 간 단일상속 (Sub class 는 단 하나의 Super class 만 가진다) . 다형 성 (Polymorphism) : Method 에 대한 Overloading 및 Overriding 적 특징 . Capsulation : 객체 의 Property 와 메소드 는 Class 내에 숨어있고, Getter 와 Setter 로서 객체는 통제된다.  일반적 특징 . Multi Thread 를 지원한다 . 자원 해제는 App 이 하는 것 이 아닌, JVM 이 지닌 Garbage Collector 에 의하여 해제된다 . Native Interface 를 지원한다  Language 적 특징 . 엄격한 Type Check 를 적용한다 (static type checking) . Security 를 위하여 Pointer 사용이 안 된다 . 예외 (Exception) 처리 구문이 있다 : try{} catch {} . Method overloading : 같은 Method 가 다양한 인자 를 지닐 수 있도록 다양화 . Class 사용 Pattern : Anonymous Class, Inner Class, Inner Method  C++ 비교 . C++ 보다는 사용하기 편하고, 완전한 객체지향 이다 . C++ 는 다중상속 가능
  • 6. 5 객체 지향적  객체 정의 . 이름이 있는 여러 개의 데이터와 그 데이터 조작을 위한 Method 가 하나로 묶인 구조 . 실 세계 영역에 있는 유형적인 것 (정보,물건,사물,개체 ) 과 무형적인 것 (개념,방법) 을 표현한다  객체 지향적 (C++,Java Script) . 비 객체 지향적 : 논리를 기반으로 동작을 중시 한다 - Button 을 예로 들면, 사용자의 요청에 의하여 형상 (모양,크기 및 색상) 을 그릴 수 있는 함수 (Function) 가 있다. 해당 함수는 호출되어 지면 그래픽으로 표현되어 보이지만, 눈으로 보이는 것일 뿐 실체적인 것은 없다 . 객체 지향적 : 자료를 기반으로 객체를 중시 한다 - 자료를 모델링 하고 이들 관계를 정의하는 모형 틀 을 지닌다 (class) - Button 이라는 Instance 객체가 만들어지고, 객체의 Property 를 통하여 형상을 정의 시키고, 객체의 method 를 통하여 형상을 그래픽으로 표현시키고, 객체에 대한 사용자 이벤트를 처리할 수 있다. App 동작 (Function) 결과 drawButton (type,color,size,text) test1 App Instance 객체 (Button) 결과 . new Button . Properties : type,color,size,text . Method : draw(), clear() . Event test2 Class Button (객체모형)
  • 7. 6 Class  정의 . Java 언어의 기본 구조(단위) 로서, 객체를 만들 수 있는 Type (형) 으로서 원형 틀 (원형객체) 역할을 한다 . class 자체 로서는 객체는 아니다. . new 와 extend 를 통하여 원형객체는 Instance 객체 화 되어지거나 상속 화 되어진다  Class 의 용도 별 구분 (1) Application 일반용 : Java 로 작성된 일반적인 Application 용도, main() 을 지닌다 (2) Application Applet 용 : Web (HTML) 과 연결되어 실행되는 Application 용도 (ByteCode 가 서버에 존재한다) (3) 서버용 Servlet : 통상 Web Server 에서 실행된다 (4) TV 방송용 App (Xlet) : MHP, OCAP 표준에 사용되는 Application (5) 내부 Package 구성용 : Package 업체가 제공하는 JRE 내의 Package 용도 < Application 일반용 > public class HelloApp { public static void main(String[] args) { System.out.println(“Hello World “) ; } } < Applet 용 > import java.applet.Applet ; public class HelloApp extends Applet { public static void main(String[] args) { System.out.println(“Hello World “) ; } }
  • 8. 7 Class  Semantics . [접근지정자] [final 속성] {class 종류} {class명} [implements] [extends] . 접근지정자 는 2가지 가 있다 : public 과 비지정 이며, 비지정 은 default 를 의미한다 하나의 java 파일에 한 개 이상의 public class 가 불가능 하다 (Inner class 제외), default class 는 복수 로 가능하다 . final 속성은 상속이 불가능한 최종 구현체 class 임을 의미한다 . Class 종류는 3가지 가 있다 : class, interface, abstract class . Class 이름은 고유 하여야 한다 . Implements 는 특정 interface 에 대한 구현체 class 임을 명기한다 . Extends 는 동일 종류간 상속 관계를 명기한다 (누가 super class 인가를 지정한다) (1) Class 간은 단일상속 만이 가능하다 (2) Interface 간은 다중상속 이 가능하다 . 예 public class myClass1 public final class myClass2 public final class myClass3 extends A implements B public interface myClass4 implements C public abstract class cmyClass5 extends D
  • 9. 8 Class 내부구성  Class 의 내부구성 . 4가지 로 분류되며, 선언 시 가장 앞서 접근 지정자 를 지닌다 . Class 멤버 (변수 및 메소드) 는 모든 Instance 객체가 공동으로 사용한다. . 객체멤버변수 와 멤버 Method 들이 Instance 객체와 상속의 대상이 된다 . 내부구성 예 package a.b.c ; // org.dvb.media import a.x.y.Test1 ; // 사용 (new) 대상 class , 같은 package 에서는 import 할 필요가 없다 public class Car implement InterfaceCar { // 1. Class멤버 변수 및 메소드 public static final int classvar1 ; // 상수변수 (상수필드 - static final) , 값은 변경할 수 없다 (ONEDAY = 24) public static int classvar2 ; // 정적변수 (정적필드 - static ) , 값을 변경할 수 있다 public static int MemberMethod5() {} ; // Static Method // 2. 객체 멤버변수 public int instvar1 ; private int instvar2 ; protected int instvar3 ; default int instvar4 ; default final int instvar5 ; // final 멤버변수 // 3. Constructor Method , Instance 객체 생성시 자동으로 호출되는 메소드 이다 , return type 이 없어야 하며, 없어도 가능하다 public Car() {} ; // 일반적인 constructor private Car() {} ; // 객체생성 (new instance ) 불가 from 다른 class // 4. 멤버 Method : Method 내부에 Static 변수를 지닐 수 없다 public void MemberMethod1() {} ; private void MemberMethod2() {} ; protected void MemberMethod3() {} ; default void MemberMethod4() {} ; }
  • 10. 9 Class 내부구성  Class 의 메모리 공간 . Class 로드, 객체의 생성 에 따라 JVM Heap 공간에 위치한다 . 비 객체 영역을 static area 로 칭하며, static 의미는 전 객체가 공유하는 단 하나의 전역 영역 이며 객체화 대상이 아니고 GC 대상이 아님을 의미한다 (new 없이 Static Method 호출 가능하다) . 객체영역을 GC area 로 칭하며, 객체의 사용이 완료되면, JVM 에서 소멸을 진행한다 . Method 내부의 지역변수는 Thread stack 영역에 위치한다 Stack 영역이란 지역변수, 매개인자, return 값, return PC (program count) 등 이 위치하는 휘발성 영역이다 public class Test { // Class (Static) 멤버 public static final KKK=10 ; public static abc = 20 ; public static method1() {} // 멤버 변수 public int ab1 ; public int ab2 ; // 멤버 메소드 public void method2(){ // } public void method3() { int local1 ; // 지역변수 A obj1 = new A ; } } JVM Heap 비 객체 영역 (static area) (PermGen 영역) JVM Heap 객체 영역 (GC area) 1) 상수필드, 정적필드 ; Class 로드 시 2) Static Method ByteCode ; Class 로드 시 3) 일반 Method ByteCode ; Method 실행 시 생성된 객체 (객체의 멤버변수) Access 가능 Access 불가 Thread Stack 영역 Method 내부(지역) 변수
  • 11. 10 Class 내부구성  final, static 속성 정리 적용 설명 Final Class . public final class String extends Objects . 상속이 불가하다 (Sub class 를 지닐 수 없다, final class 를 extends 하면 ERROR) . java.lang 이 제공하는 내장 Class 는 대부분 final 속성을 지닌다 Method . public final String prn() . Final method 는 overriding 불가하다, 완전한 구현 Method 임을 암시한다 Variable . public final int abc =10; . 필드 (상수, 정적) 가 아닌 멤버변수 이다 . 선언 시에 한번만 대입 (assignment) 가능하다 . 멤버변수 이나 상수변수 (constant) 개념 이다 Static Class . public static InnerClassA . Inner class 에서 static / non-static 속성을 나타낸다 static : Class 멤버 (메소드, 변수) 중에 static 이 있을때 반드시 사용, Static heap 사용 일반 static 메소드 처럼 new 없이 사용 가능하다 non-static : 일반 class 처럼 사용되어 진다. Outer 객체를 생성후에 Inner 객체를 생성한다 Method . public static int method1() . Class 멤버이다 . Class 로드 시 heap 에 탑재됨으로, new 없이 호출가능 하다 . 멤버변수 나 멤버 Method 를 access 할 수 없다 . 주로 멤버객체변수를 이용하지 않고 단순계산을 지니는 메소드 에 적용된다 Variable . public static int abc =10 ; . Class 멤버이다 1) 상수변수 (상수필드) : static , 변경 불가능 2) 정적변수 (정적필드) : static final , 변경 가능 . Class 로드 시 heap 에 탑재됨으로, Access 가능하다: myClass.NAME
  • 12. 11 Class 객체화  객체화 방법 Class 에 대한 객체 생성 방법은 아래와 같은 세가지 방법이 있다 1) new (keyword) 를 통하여 객체생성 : Car mycar1 = new Car(“abc”) ; 2) Literal 적인 방법으로 객체생성 : String mycar2 = “xyz” ; Literal 적인 방법은 일반적인 Class 는 안되고 (의문임 ?), Primitive data type (String,Integer,Character,Object,,) 들만 가능 하다 3) Class 를 동적으로 Loading 하여 객체 생성방법 . 해당 class 가 local machine 에 존재하지 않고, 서버에 존재하는 경우 이를 불러와 로딩하는 경우 . Class 이름을 모르는 경우 (이름을 어느 객체 로 부터 run-time 에 획득하여) . Reflect 내장 class 를 이용하여 가능하며, 자세 내용은 Reflect 를 참고 한다 (1) Constructor 가 없는 경우 : Class 객체를 이용한다 (2) Constructor 가 있는 경우 : Class 객체 와 Constructor Reflect class 를 이용한다 public static void DynamicClassLoadTest(){ // Constructor 가 없는 경우 Class obj1 = Class.forName("a.b.c.NoConstructorClass") ; NoConstructorClass obj2 = (NoConstructorClass) obj1.newInstance() ; obj2.method1() ; // Constructor 가 있는 경우 Class obj3 = Class.forName("a.b.c.ConstructorClass") ; Constructor obj4 = obj3.getConstructor(String.class) ; // Arg.가 String 임으로 이리 지정한다 (하나만 있다고 가정) ConstructorClass obj5 = (ConstructorClass) obj4.newInstance("Korea") ; obj5.method1() ; }
  • 13. 12 Class 객체화  객체화 new . extend 는 Class 간 상속관계를 형성 시키며 (Super vs Sub) , 최종적으로 new 를 통하여 객체화 되어진다 . Extend – New Pattern 1) 단일 Class 2) Super Class : 일반 3) Super Class : Abstract . Extend 와 객체화 를 통하여 Class 의 구성요소는 아래와 같이 공유 및 Instance 된다 Class 구성요소 객체생성 (new) Class 상속(extend) 상수필드, 정적필드 전 객체간 공유 (단 하나) 공유 및 확대 (추가) 객체 멤버 변수 Instance (독립된 멤버변수) 공유 및 확대 (추가) 멤버 메소드 전 객체간 공유 (단 하나) 공유, 확대 및 Overriding (대체) Class A Instance 객체 Y Y = new A Abstract Class D Class E Instance 객체 Z Z = new Eextend D Class 구성요소 (1) Class 멤버변수 (필드) (2) 객체 멤버변수 (3) Constructor (4) Method Class B Class C Instance 객체 K K = new Cextend B
  • 14. 13 Class 객체화  객체화 Literal 적 방법 . new 를 사용하지 않고 선언 및 초기값을 지정하면 JVM Heap 공간에 잡히는 Instance 객체는 만들어 진다 . new 와 차이점은 동일한 초기값을 지니면 기존의 객체를 동일하게 사용한다 (s7 는 reference 로는 존재하나, 새로운 객체가 아닌 s6 에서 만들어진 객체가 사용된다)  String 객체에 대하여 new 및 Literal 적용으로 생성 된 객체모습 public class MyApp1 { public static void main(String[] args) { String s1 = "AAA"; // Literal String s2 ; String s3 = new String("AAA"); String s4 = new String("AAA"); String s5 = s4 ; // 별도객체 아님 String s6 = “BBB” ; // Literal String s7 = “BBB” ; // 별도객체 아님 } } Object os1 Object os3 Object os4 Object os5 JVM Heap Reference Value s1 * os1 s2 Null s3 * os3 s4 * os4 s5 * os4 s6 * os5 s7 * os5 public final class String{ } Thread Stack
  • 15. 14 Class 유형  Class 유형 및 semantics Class 는 아래 세가지 유형으로 구분 할 수 있다 (1) class ; 접근지정자 class class이름 extends A, implement B (2) abstract class ; 접근지정자 abstract class class이름 extends A, implement B (3) interface ; 접근지정자 interface 인터페이스이름 extends 상위인터페이스 . extends 는 같은 유형 간 (class 와 class, interface 와 interface 간) 상속 을 의미한다 . implement 는 class 가 적용하는 interface 를 의미한다  Class 유형별 세부특징 비교 구분 Class Abstract Interface 비고 Instance 객체화 (new) O X X new interface(){} 는 익명 Class Pattern 이지 Interface 에 대한 객체화 의미는 아니다 다중상속 (extend) X X O Interface 가 여러 Interface 를 상속 가능하다 Class 간에는 단일 만 가능하다 Static final (상수변수) O O O 정적변수 O O X 멤버변수 O O X 일반 메소드 O O X 추상 메소드 X O O
  • 16. 15 Class 유형  접근 지정자 . Class 및 멤버변수 및 멤버 메소드 에 대한 접근속성 (접근 가능여부) 을 가져간다, 특정한 지정이 없으면 default 속성을 지닌다 . 접근 지정자 사용 예 지정자 Same class Same package Universe Sub class 정리 public Yes Yes Yes Yes 어느 class 에서라도 접근이 허용된다 protected Yes Yes No Yes 상속을 하면 동일 Package 가 아니더라도 접근이 허용된다 default Yes Yes No No 동일한 Package 내부 에서만 접근이 허용된다 private Yes No No No 동일한 class 내부 에서만 접근이 허용된다 Constructor 에 이것을 이용하여 객체생성 (new) 불가토록 한다 package a.b.c ; public class Test1(){ public int var1=1 ; protected int var2=1 ; default int var3=1 ; private int var4=1 ; } // 다른 Package 에서 접근 package a.b.k ; import a.b.c.Test1 ; public class Test3{ void method1(){ var1 = 10 ; var2 = 10 ; // ERRROR var3 = 10 ; // ERROR var4 = 10 ; // ERROR } } // Sub Class 에서 접근 package a.b.k ; import a.b.c.Test1 ; public class Test4 extends Test1{ void method1(){ var1 = 10 ; var2 = 10 ; var3 = 10 ; // ERROR var4 = 10 ; // ERROR } } // 동일 Package 에서 접근 package a.b.c ; import a.b.c.Test1 ; public class Test2{ void method1(){ var1 = 10 ; var2 = 10 ; var3 = 10 ; var4 = 10 ; // ERROR } }
  • 17. 16 Class 유형  Abstract class . 참고 하는 디자인 혹은 모델 개념이다 (추상화) . 직접 객체를 발생 시킬 필요가 없고, 단지 상속에 의해서 하위 class 만 제어할 목적이다. . abstract class 내 에서 추상 method 는 반드시 존재 하여야 하며, 상속받는 class 에서 구현 되어야 한다. . 즉, 공통 부 는 Abstract class 가 선언한 것을 사용하며, 가변 부 (abstract method) 만 sub class 에서 구현하여 class 의 완성을 가져가는 개념이며, 완성된 class 만 Instance 객체화 가 가능하다 Abstract Class Car extends Car Class Truck Class Sedan new Truck new Car // 불가 객체 X 객체 Y Super Class Sub Class
  • 18. 17 Class 유형  Abstract class , Override . Override 란 OOP 가 지향하는 다형 성 의 특징으로, sub class 가 super class 의 메소드 를 대체 하는 것 이다 . Final 로 지정된 속성을 지니는 method 는 override 불가능 하다 . Override 예 public void method1 {} ; Public void method2 {} ; Class C Abstract Class B Abstract Class A extends A extends B public void method1 {} ; // Override method public void method3 {} ; // 추가된 method public void method2 {} ; // Override method public void method3 {} ; // Override method public void method4 {} ; // 추가된 method
  • 19. 18 Class 유형  Abstract class . Template Code package a.b.c; public abstract class AbstractClass { public static final int var1 = 20 ; protected int var2 ; public int var3 ; private int var4 ; public abstract void method1() ; public void method2(){} } package a.b.c; public class AbstractExtendsClass extends AbstractClass{ public void method1(){ // Abstract method 의 실제 구현부 } public void method2(){ // Override Method } public void method3(){ // Add method in this class } } package a.b.c; public class Main{ public static void AbstarctClassTest(){ /* Can't instance as Abstract class AbstractClass obj1 = new AbstarctClass() ; */ AbstractExtendsClass obj2 = new AbstractExtendsClass() ; obj2.method1(); obj2.method2(); obj2.method3(); } }
  • 20. 19 Class 유형  Interface . 상수필드 와 abstract method 만을 지니며, 실제 구현은 Implement 를 선언한 class 가 적용한다 . 사용 측 (App) 과 구현 측 (기본 Package) 의 약속된 규정 역할을 하는 단순 Interface 이다 . Interface 간 다중상속 이 가능하다 . 특별한 선언이 없어도 Interface 내의 모든 메소드 는 abstract 메소드 이며 모든 변수가 static 상수이다 . Java8 부터 추가된 default keyword : Interface 내의 메소드 를 실제구현 – Interface 는 다중상속이 됨으로, 단일상속 에 대한 확장개념 . 주로 Interface 는 아래와 같이 Handler 와 Listener 용도로 사용된다 . Interface 사용 Pattern Interface A Interface B Interface C extend A,B Class D implement B,C Abstract Class E Implement C Interface 의 다중상속 Pattern 일반적인 Interface 의 적용 (하나 이상을 implement 할 수 있다) Abstract class 도 Interface 를 적용 할 수 있다 Interface C App Interface (Handler) Class Interface (Listener) App Notify Event / Data
  • 21. 20 Class 유형  Interface Class . 선언에 상관없이 모든 변수 는 static final 이며, 모든 method 는 abstract 이다 . Template code package a.b.c; public interface InterfaceClass { public static final int KKA = 20 ; public static int KKB = 20 ; // this is also static final public int KKC = 20 ; // this is also static final public abstract void method1() ; public void method2() ; // this is also abstract } package a.b.c; public class InterfaceImplementClass implements InterfaceClass { public int var1 ; public int var2 ; public void method1(){ // 실제구현 method } public void method2(){ /* can’t access as static final KKA = 10 ; KKB = 10 ; KKC = 10 ; */ } }
  • 22. 21 Class 유형  Abstract interface stackoverflow.com 에서 찾은 내용은 아래 와 같이 두 가지로 정의된다 1) Every interface is implicitly abstract. This modifier is obsolete and should not be used in new programs. 2) Be aware that in Spring it has non academic meaning. The abstract interface is a warning to the developer not to use it for @Autowired. I hope that spring/eclipse @Autowired will look at this attribute and warn/fail about usages of such. A real example: @Service proxy under @Transnational to a @Repository need to use same basic methods however they should use different interfaces that extends this abstract interface due to @Autowired. (I call this XXXSpec interface)
  • 23. 22 Class 유형  Abstract class , Override . Override 란 sub class 가 super class 의 메소드 를 대체 하는 것 이다  객체의 지칭 자 : this , super . This : Instance 객체 자신을 지칭한다 . Super : extend 시 Super class 의 멤버 변수 혹은 멤버 method 를 지칭한다 생성자 (Constructor) 에서 super 를 호출하면 Super class 의 생성자 를 호출함 public void method1 {} ; Public void method2 {} ; Class C Abstract Class B Abstract Class A extends A extends B public void method1 {} ; public void method3 {} ; public void method2 {} ; public void method4 {} ; method2 를 대체한다method1 을 대체한다 Public public void method1 {} ; Public void method2 {} ; Class B Abstract Class A extends A public void method1 {} ; public void method3 { method1() ; // Class B 의 mthod1() 이 호출 this.method1() ; // Class B 의 mthod1() 이 호출 super.method1() ; // Class A 의 mthod1() 이 호출 } method1 을 대체한다
  • 24. 23 Class 사용 Pattern  현실구현 일반적 모습 // Notify Event at Class K public void postEvent(Object listener, Object evt) { if( evt instanceof ServiceContextEvent ) { ((ServiceContextListener)listener).receiveServiceContextEvent((ServiceContextEvent)evt); } } App Class Main() Interface A (Handler) Class K Interface B (Listener) Notify EventImplement A Class B Abstract Class A JNI Import B // for new B Import C // for new C Extends A Action (gfx, file, socket) Implement B k = new K k.addListener() k.Method() Class C Event Native
  • 25. 24 Class 사용 Pattern  사용 Pattern (1) 하나 이상의 Class (2) Inner Class (3) 지역 (Local) Class : Method 내부의 Class 로서, Method 내부의 지역변수 와 동일한 성격을 지닌다 (4) 익명 (Anonymous) Class : Method 내부의 Class 이지만 익명을 지닌다  하나 이상의 Class . 일반적으로 Java 파일 하나에 하나의 Public class 를 지닌다 . 하나의 Public class 와 여러 개의 default class 를 지니는 것도 가능하지만, 이를 대체 하는것이 Inner class 이다 Class 간 멤버접근이 불가능 한 특징이며, 이를 보완 하는것이 Inner class 사용 방법 이다 package a.b.c; public class OuterClass { public int vara = 10 ; private int varb = 10 ; // varx = 20 ; // can't access } /* only one public class should be exist public class OuterClass2 { } * / class OuterClass3{ public int varx = 10 ; private int vary = 10 ; // vara = 20 ; // can't access }
  • 26. 25 Class 사용 Pattern  Inner Class . Class 내부에 Class 를 두는 경우를 의미한다 . 목적은 편의성 과 단순성 을 위함이다 : 간단한 class 를 여러 파일에 두지 않고 Code 의 단순성을 가져간다 . 두 가지 로 분류 할 수 있다 (1) Non-static inner class (2) static inner class . Inner class 내부에서 상속은 static 은 static 간 , non-static 은 non-static 간에 만 가능하다 구분 특징 Non-static Inner class . Inner 클래스의 객체를 만들기 위해서는 반드시 Outer클래스의 객체를 생성하고 이를 통해 Inner클래스를 만들어야함 OuterClass.InnerA obj1 = new OuterClass().new InnerA(); . Inner클래스는 Outer클래스의 맴버에 접근 할 수 있지만 Outer클래스는 Inner클래스의 멤버에 직접 접근 할 수 없다. Static Inner class . Static 멤버 (변수 혹은 메소드) 가 있으면 반드시 static 으로 지정 되어야 한다 . Static Heap 영역에 위치 함으로, Outer클래스의 객체 생성 없이 바로 객체 생성이 가능 OuterClass.InnerD.method1(); . Inner 클래스에서는 Outer클래스에 정의된 멤버중 에 static 멤버만 직접 접근이 가능. Main Class Non-static InnerA Class Outer Class Static InnerD Class 직접 access 가능 OuterClass.InnerA obj1 = new OuterClass().new InnerA(); Obj1.method1() ; OuterClass.InnerD.method1();
  • 27. 26 Class 사용 Pattern  Inner Class 예제 Code package a.b.c; public class OuterClass { public int var1 = 10 ; public void outMethod1() { } public void outMethod2() { // varx = 20 ; // can't access InnerA obj1 = new InnerA() ; } public class InnerA{ public int varx = 10 ; /* Can't here as static member public static int var1 = 10 ; public static void method2(){ */ public void method1(){ var1 = 20 ; // can access outMethod1() ; // can access } } public class InnerB extends InnerA{ } /* Can't extends between static and non-static public static class InnerC extends InnerB{ } */ public static class InnerD { public static void method1(){ // var1 = 20 ; // can't access // outMethod1() ; // can't access } } public static class InnerE extends InnerD{} }
  • 28. 27 Class 사용 Pattern  익명 (Anonymous) Class . Method 내부의 지역 Class 로서 선언이 보이지 않고, new 와 함께 임시 class 가 생성된다 . 주로 Interface 인 Listener 에 대한 적용 시 사용되며, Implement 적용 class 를 별도로 만들지 않고 Interface 를 직접 new 하여 임시 class 를 만들어서 사용하는 방법 이다 . 목적은 간편성을 위함이다 . Template Code package a.b.c; public interface InterfaceClass { public static final int KKA = 20 ; public static int KKB = 20 ; // this is also static final public int KKC = 20 ; // this is also static final public abstract void method1() ; public void method2() ; // this is also abstract } package a.b.c; public class AnonymousClass { public void method9(){ /* This is Anonymous class */ InterfaceClass obj1 = new InterfaceClass(){ public void method1(){} public void method2(){} }; // 반드시 ; 가 붙어야 한다 } }
  • 29. 28 Class 사용 Pattern  싱글톤 (Singleton) 객체 . 객체 지향적 일 지라도 특정한 것 은 응용 단에서 단 하나의 객체만으로 이용 가능한 객체 형태를 의미한다 . 예를 들어, HW 자원이 하나인 Tuner 에 대한 객체는 하나만 있어도 객체적 의미를 다하는 것이다 . 일반적으로 사용자는 getInstance 라는 메소드를 통하여 Instance 객체를 얻어간다 . new 를 못하게 하도록 Constructor 를 Private 으로 지정한다 - new 를 하면 Exception 이 발생한다 < 고전적인 방법 > public class ClassicSingleton { private static ClassicSingleton instance = null; protected ClassicSingleton() { // Exists only to defeat instantiation. } public static ClassicSingleton getInstance() { if(instance == null) { instance = new ClassicSingleton(); } return instance; } } < Private Constructor 를 이용하는 방법 > package a.b.c; public class SingletoneClass { private static SingletoneClass stc = new SingletoneClass() ; // To set as private, Not to allow new instance from other class private SingletoneClass(){ System.out.printf("Instancing SingletoneClass n") ; } // Need static to call without new instance public static SingletoneClass getInstance(){ return stc ; } }
  • 30. 29 Class 사용 Pattern  javax.tv.service 의 ServiceContext 사례 . ServiceContext 는 특정한 사용자 서비스 (예. Watch TV Main, Watch TV PIP) 를 위한 Context 객체로 사용되며 아래 그림은 SvcContext 객체를 얻기 위한 과정을 표현한다 . SvcContext 객체의 select Method 를 이용하여 특정 Program 을 선택한다 Abstract Class SvcContextFactory Abstract Class SvcContextFactoryExt Class SvcContextFactoryImpl extends extends Interface SvcContext Interface DvbSvcContext Interface SvcContextExt Class SvcContextImpl Interface DVRSvcContextExt Class DVRSvcContextImpl implements implements extends extends extends extends < Application > // Step1. Service 객체를 얻는다 // Step2. ServiceContext 객체를 얻는다 scf = ServiceContextFactory.getInstance() ; sc = scf.createServiceContext() ; // Step3. 해당 Service 에 대하여 선택을 요청한다 sc.addListener(new SeriviceContextListener()) ; sc.select (Service) ; // Or Locator new 를 사용하지 않고 객체생성방법 (3) 으로 객체를 생성한다 Interface SvcContextListener
  • 31. 30 Java.lang Class  Primitive Data Type Class . Variable 에 대한 Primitive Data Type 도 Class 모형을 지니는 객체이다 Java.lang Class Class 형태 주요 Method Boolean public final class Boolean implements java.io.Serializable Character public final class Character implements java.io.Serializable, java.lang.Comparable Byte Short Integer Long Float Double public final class Byte extends java.lang.Number implements java.lang.Comparable public final class Short extends java.lang.Number implements java.lang.Comparable public final class Integer extends java.lang.Number implements java.lang.Comparable public final class Long extends java.lang.Number implements java.lang.Comparable public final class Float extends java.lang.Number implements java.lang.Comparable public final class Double extends java.lang.Number implements java.lang.Comparable parseByte parseShort parseInt parseLong parseFloat parseDouble String public final class String implements java.io.Serializable, java.lang.Comparable, java.lang.CharSequence length, charAt, getChars, getBytes compareTo, concat, replace toUpperCase, toLowerCase, Class public final class Class implements java.io.Serializable forName, getField, getMethod, getConstructor getDeclaredMethod newInstance Object public class Object finalize, notify, wait
  • 32. 31 Java.lang Class  Primitive Data 객체 Array 만들기 . 세가지 방법으로 선언한다 , 초기화 값에 의하여 size 가 정해 지거나 명시적으로 size 를 정한다 . [] 위치는 Data type 에 있어도 무방하다 : int ar1[] == int[] ar1 . Reflect Class 를 이용하여 생성하는 방법도 있다 라는 것을 참고 바란다 : Array.newInstance public static void ArrayTest(){ int ar1[] = {0,1,2,3,4,5} ; // The size must be 6 by init value int ar2[] = new int[] {0,1,2,3} ; // The size must be 4 by init value int ar3[] = new int[5] ; // The size must be 5 // int ar4[] ; // This is not allowed as init value or size is not determined System.out.printf("ar1=%d, ar2=%d,ar3=%d n",ar1.length,ar2.length,ar3.length) ; int ar5[][] = { {1,2},{1,2} } ; // The size must be 2 by init value int ar6[][] = new int[10][10] ; // The size must be 10 System.out.printf("ar5=%d, ar6=%d n",ar5.length,ar6.length) ; }
  • 33. 32 Java.lang Class  Reflect Class . 해당 class 의 구성 요소를 조사 하거나 변경 하고자 하는 목적이다 . 이를 이용하여 동적 객체 생성에 활용을 할 수 있다 . 실제 자바빈 에서는 Method 의 이름이 실행시간에 주어짐으로 Reflect class 를 활용하여야 한다 Java.lang.reflect Class Class 형태 주요 Method Array public final class Array newInstance Set,Get Constructor public final class Constructor extends Accessible Object implements Member GetName, getDeclaringClass newInstance getExceptionTypes getParameterTypes Field public final class Field extends Accessible Object implements Member getName, getType getDeclaringClass Method public final class Method extends Accessible Object implements Member getName, getReturnType getDeclaringClass getExceptionTypes getParameterTypes
  • 34. 33 Java.lang Class (Object)  Object Class . 모든 Class 는 Super Class 에 대한 extends 지정이 없다면, java.lang.Object class 를 자동 상속하게 되어있다. Object class 가 제공하는 Method 를 이용하여 객체를 관리 하는데 사용하는 목적이다 Method 설명 비고 boolean equals(Object obj) 두 개 의 객체가 같은지 비교한다 String toString() 현재 객체의 문자열을 얻는다 protected Object clone() 객체를 복사 시킨다 protected void finalize() GC 직전에 resource 를 정리하는 목적이다 Finalize Thread 가 호출 Class getClass() 객체의 Class 형을 얻는다 int hashCode() 객체의 Code 값을 얻는다 void notify() Wait 된 thread 실행재개를 요청한다 void notifyAll() Wait 된 모든 thread 실행재개를 요청한다 void wait() void wait(long timeout) void wait(long timeout, int nanos) Thread 를 일시적으로 중지 시킨다 Class Object Abstract Class A extends Object Class B extends A
  • 35. 34 Java.lang Class (Exception)  Exception Class . 모든 Exception (xxxException ) 종류 들을 객체로 관리한다 (Class 가 있고 객체화 되어져서 사용된다) . Throw keyword 를 통하여 exception 을 delivery 한다 public class Test1{ public void method1(){ Test2 obj = new Test2() ; try{ obj.method2() ; } catch (IOException e){ String str = e.getMessage() ; } } } public class Test2{ public void method2() throws IOException { // IOException 객체를 생성하고 delivery 한다 throw new IOException() ; } } public class IOException extends Exception { public IOException() { super(); } public IOException(String s) { super(s); } } Exception 전달 객체 Class < java.lang 의Exception 종류 들 > NullPointerException NoSuchMethodException NoSuchFieldException ArithmeticException ArrayIndexOutOfBoundException ArrayStoreException NegativeArraySizeException ClassCastException ClassNotFoundException CloneNotSupportedException InterruptedException IllegalAccessException IllegalArgumentException IllegalMonitorStateException IllegalStateException IllegaThreadlStateException IndexOutOfBoundException InstantiationException NumberFormatException RuntimeException SecurityException StringIndexOutOfBoundException
  • 36. 35 Java.lang Class (Thread)  Thread Class (java.lang.thread) . Multi Thread 를 구현하는 객체이다 . Multi Thread 란 Kernel 의 Scheduler에 의하여 Code 의 Context Cycle (execution-waiting-ready) 이 실행되는 것을 말한다 . Execution 스케쥴링 적용에는 시 분할적인 개념이 적용된다  Multi Thread 적용 두 가지 방법 1) 실행 Class 가 Thread class 를 상속하여 (extend) 사용 2) 실행 Class 가 Runnable class 를 Implement 하여 사용 하는 방법 : Thread 를 상속하지 않고 다른 Class 를 상속하는 경우 Execution Ready Waiting / Blocking Signal / Notify Wait, Sleep, Sync public class 실행A extends Thread{ public void run(){ // Code } } public class 실행B extends ABC implements Runnable{ public void run(){ // Code } } public class App{ public static void main(String args[]){ Thread thread1 = new 실행A ; thread1.start() ; } } public class App{ public static void main(String args[]){ 실행B obj = new 실행B ; Thread thread2 = new Thread(obj) ; thread2.start() ; } }
  • 37. 36 내장 Class (Thread)  Thread Class (java.lang.thread) . main() 에서 실행 Class 에 대하여 객체화 및 start 를 진행한다 . 실행 Class 는 Thread 를 상속 받아야 하며, 반드시 run() 메소드 로 실행 context 가 적용 되어야 한다 . Thread Class 는 Runnable interface 를 implement 하고 있다 public class App{ public static void main(String args[]){ Thread thread1 = new 실행A ; Thread thread2 = new 실행B ; Thread thread3 = new 실행C ; thread1.start() ; thread2.start() ; thread3.start() ; } } App Class main() 실행A Class run() 실행B Class run() 실행C Class run() Class Thread Interface Runnable implementsextends Thread extends Thread extends Thread public class 실행A extends Thread{ public void run(){ // Code } } public class 실행B extends Thread{ public void run(){ // Code } } public class 실행C extends Thread{ public void run(){ // Code } }
  • 38. 37 내장 Class (Thread)  Thread 간 상호동작 1) Shared Memory 기법 : 각 thread 의 멤버변수를 동일한 Object 으로 배정하여 관리한다 2) Critical Section 의 동기화 : synchronized KeyWord 를 사용하여 동기화 Block, 동기화 Method 를 적용 – 상호배제 적용 public class SharedMemory { public int msg ; public int state ; } public class Test1 extends Thread { SharedMemory sm ; } public class Test2 extends Thread { SharedMemory sm ; } public class MyApp2 { public static void main(String[] args) { Test1 test1 = new Test1 ; Test2 test2 = new Test2 ; SharedMemory smo = new SharedMemory() ; test1.sm = smo ; test2.sm = smo ; } } < 동기화 Block > public class Test1 extends Thread { SharedMemory sm ; public void run(){ synchronized (sm){ // Thread 간 같은객체 // Code } } } < 동기화 Method > synchronized void SyncMethod() { // Code }
  • 39. 38 내장 Class (Thread)  Thread 간 상호동작 3) Scheduling Event : Wait, Notify . Synchronized 를 이용하여 Thread 간 동일 한 객체를 사용 하여야 한다 public class Test1 extends Thread { SharedMemory sm ; public void run(){ synchronized (sm){ // 같은객체 sm.notify() ; } } } public class Test2 extends Thread { SharedMemory sm ; public void run(){ synchronized (sm){ // 같은객체 sm.wait() ; } } } Wait 로 Test2 는 Pending 으로 들어가고 Notify 로 Test2 를 wake up 시킨다
  • 40. 39 내장 Class (Thread)  Thread Class (java.lang.thread) . Thread class 가 제공하는 Method 내역 Thread Class Method 설명 비고 public void start() public void run() public State getState() public final void join() Thread 시작을 요청한다 개별 Thread 에서 Overriding 대상이다 RUNNABLE, WAITING, TIMED_WAITING, BLOCKED A 스레드가 B 스레드를 시작시켰을 때 A 스레드는 B 스레드의 실행이 완전히 끝날 때 까지 기다리는 목적이다 public static void yield() public static void sleep() 높은 Priority 를 지닌 Thread 에게 Execution 을 잠시 양보 특정시간 동안 TIMED_WAITING 상태로 진입을 요청한다 public final void setPriority() public final int getPriority() public final void setName() public final java.lang.String getName() 스케쥴링 우선순위를 지정한다 Thread 이름을 지정한다 public void interrupt() public static boolean interrupted() public boolean isInterrupted() Sleep 상태 일 경우, sleep 에서 깨어나면 InterruptException 을 발생요청 public void destroy() public final boolean isAlive() Thread 객체를 폐기한다 public static void dumpStack() Thread stack 을 Dump 한다 (디버깅 목적)
  • 41. 40 JVM GC  GC (Garbage Collector) . JVM Heap 은 시스템 메모리와는 별도로 JVM 에 의하여 관리되는 영역이다 (JVM 시작 시 size 가 주어진다) . Object 생성시 각종 data 의 거주공간 이다 . JVM 에 의하여 GC (free 행위) 가 진행되며, 아래와 같이 두 가지 GC 방법이 있다 (1) JVM 의 내부 Thread 에 의하여 점진적으로 해제처리 (2) 강제 요청에 의하여 (System.gc()) . GC 는 아래와 같이 두 가지 공간으로 관리된다 (JVM 시작 시 Minor GC 주기 가 지정되며, default 4분이다) . 실제 사용시 아래와 같은 Pattern 을 보인다 몇 차례의 GC 에도 남아있는 Object Old GenYoung Gen new Object Minor GC 대상 Major GC 대상 시간 Heap Free
  • 42. 41 JVM GC  Finalizer . Object 생성시 Finalizer 를 상속하는 객체는 자동으로 Finalizer 에 대하여 Reference 를 생성하고 Finalizer Queue 에 본인을 등록한다 . Finalizer 는 비 주기적으로 Queue 에 있는 객체를 검사하여 Queue 에 등록된 객체의 Reference 가 Finalizer 이외에는 없는지 확인한다 . 없다면, Object 의 finalize() 를 호출하고, 종료 후 Finalizer 가 가리키고 있는 해당객체의 Reference 를 끓게 된다. Class A Object A1 Object A2 Object A3 Object B1 Object B2 Object B3 Class B JVM Heapreference new A new B Finalize Method Finalize Thread GC no reference then free reference No Reference 대상등록 Still Alive finalize() NO ( Finalizer 와 상관없이 GC 의 관리대상) GC 의 관리대상
  • 43. 42 JVM JNI  Java Native Interface  Call Native Function From Class  Call Method From Native . Jmethod_list.def 파일에 method 를 등록 하여야 한다 Class JVM JNI Interpreter.c Native Function public class Car{ // 특정한 define 없이 class 에서 아래와 같이 호출만 한다 private native void Nfunction1() ; public Method1(){ Nfunction1() ; } } JNIEXPORT void JNICALL PackageName_ClassName_Nfunction1(){ ; } // Function 이름은 Package 와 Class Name 을 포함 하여야 한다 // Arguments : (JNIEnv, jObject, arg1, arg2,,) Native Function Java Bridge Class Method() Call<type>Method VMI_BridgeCall Jmethod_list.def JVM < Object 획득 > jobjectArray = new ObjectArray ; Jobject = new Object ; jbyteArray = new ByteArray ; jstring = new StringUTF ;
  • 44. 43 JVM JNI  Event or Result from Native Class A Java BridgeNative Function startMonitor() // for Event realRequest() // for Result VMI_BridgePostEvent VMI_BridgePostResult Event Handler Request Handler Class A postEvent notifyResult
  • 45. 44 Language Feature  KeyWord . KwyWord 란 : 언어에서 사용랄 목적으로 이미 예약해 놓은 단어 들 . Class 나 멤버변수 및 멤버 메소드 이름으로 사용 할 수 없다 분류 종류 비고 Package package, import Class 종류 Class 및 멤버 Method 속성 Class 및 멤버 변수, Method 접근 지정자 JNI Method class, abstract, interface final, static public, private, protected, default native 객체화 및 상속 객체 지칭 모객체 여부 new, extends, implements this, super instanceof Exception 처리 Multi Thread Sync 처리 throw, throws synchronzed 기타 void, const, return, volatile, transient Variable type (primitive) boolean, char, byte, short, int, long, float, double 객체가 아님 Try & Catch try, catch, finally 조건문 , 반복문 for, if, else, do, while, switch, case, continue, goto, break
  • 46. 45 Language Feature  7.0 에서 적용된 Feature (1) Null-safe method invocation : Null check 를 위한 coding 방법을 macro 화 (2) String in Switch statements : 원시형 (int,short,char) varaible type 만 가능에서 string 도 가능하도록 , code 용이성 (3) Multi-exception catch : 다중 catch 에 대한 one line 가능 (4) Bracket notation for collection ; 선언 과 동시에 초기화 가능토록 (5) ForkJoinFramework ; 병렬처리 (multi procoessor) < Multi-exception catch > // Old style try { ...... // IO 작업 } catch( IOException e ) { e.printStacktrace(); } catch( Exception e2 ) [ System.out.println(" Exception : " + e2); } // New style try { block of statement } catch( IOException e | Exception e2 ) { block of statement } < Null-safe method invocation > // Old style public String getPostcode( Person person ) { if( person != null ) Address address = person.getAddress(); if( address != null ) return address.getPostcode(); return null; } // New style public String getPostcode( Person person ) { return person?.getAddress()?.getPostcode(); } < Bracket notation for collection > // Old style Collection<String> c = new ArrayList(); c.add("one"); c.add("two"); c.add("three"); // New style Collection<String> c = new ArrayList {"one", "two", "three"};
  • 47. 46 Language Feature  Collection . Collection 이란 배열을 통해 연속된 공간에 Data 를 수집하는 여러 종류의 객체들을 말한다 . java.lang.utilty 하부에 Class 가 존재한다 (java.lang 이하는 Import 를 하지 않아도 된다) . 사용 용도에 따라 4 가지로 분류된다 (1) Set 계열 : HashSet , 순서 없고 중복불허 (2) List 계열 : ArrayList, Vector , 순서 있고 (index) 중복허용, Vector 는 sync 사용, ArrayList 는 sync 미 사용 (3) Map 계열 : HashMap, HashTable , key 와 value 가 한 쌍 , HashMap 은 null 허용, HashTable 은 null 미허용 (4) Queue : LinkedList < HashTable  Enumber  String > HashTable ht new HashTable = {} ; ht.put (“a1”,”abc”) ; ht.put (“a2”,”def”) ; ht.put (“a3”,”ghi”) ; Enumeration keys = ht.keys() ; Enumeration values = ht.elements() ; keys.hasMoreElements() ; // boolean String key = keys.nextElements() ; value = ht.get(key) ;