3. 1. 객체지향 프로그램 ( OOPL )
5. Class & Object
• 객체:모든데이터,객체의상태(state)와행동(behavior)을 구체화하는형태의프로그래밍이바로객체지향프로그래밍
• 논리적클래스,객체,메소드,관계및기타프로세스를소프트웨어및애플리케이션설계를바탕으로
• 객체지향프로그래밍언어의프로그래밍구문이하나이상의객체를기반으로
• 데이터추상화,상속,캡슐화,클래스생성및관련개체를포함하여기본개체지향기능을나타내야언어.
“ 객체 지향 프로그래밍(OOP) 모델을 기반으로 하는 고급 프로그래밍 언어 “
5-1. 객체지향
객체지향프로그램언어(Object-Oriented Programming Language )
왜Class가만들어졌을까?
• Data관점
-절차적언어문법으로복잡한
Data를 표시에한계있음
변수
베열
구조채
클래스
운전자가 자동차에 탑승 한다.
• 처리관점
-순차적으로처리하는기능중심
의프로그램은프로그램이복잡
해짐
많은변수필요
동일자료형 -복잡해짐
다차원배열필요
서로다른자료형
-구조가복잡해짐
운전자가 자동차 시동을 켠다
운전자가 자동차 운전을 한다
장애
감지
운전자가 자동차를 정지 한다.
Yes
No
자동차의기능과
사람의기능이
혼재되어있음
다른사람이운전
을한다면 …
자동차
문
브레이크
엑셀레이터
문이 열린다
시동이 켜진다
전진한다
정지한다
사람
손
눈
장애물 판단한다
자동차 문을 연다
엑셀레이터를 밟는다
브레이크를 밟는다
발 자동차 전원을 켠다
전웡(key)
사람
사람
사람
프로그램
기술
진화
4. 1. 객체지향 프로그램 ( OOPL )
5. Class & Object
• 캡슐화(Encapsulation )=정보은닉
-프로그램내에서같은기능의목적으로작성된코드를모아서다른곳(Class )
에서안보이게숨기는것
-Class 속성을숨기고(private ),공개(public )
• 상속(Inheritance )=재사용+확장
-Class와 Class관계 정의 ( 부모와 자식 )
-자식Class는부모Class 속성 및 기능을 사용 할 수 있음
• 다양성(polymorphism;폴리모피즘)=사용편의
-하나의 객체가 여러 가지 형태를 가질 수 있는 것.
-오버라이딩( 재정의:Overriding ),오버로딩( 기능확장 :Overloading )
“ 객체 지향 프로그래밍(OOP) 모델을 기반으로 하는 고급 프로그래밍 언어 “
5-1. 객체지향
OOP3대요소
• 단일책임원칙(Single Responsibility Principle)
- 모든클래스는각각하나의책임만가져야한다.
- 특수한목적을수행하도록만든클래스는해당목적외에다른기능을수행하면안된다.
• 개방-폐쇄원칙(Open Closed Principle)
- 클래스는 확장에는 열려 있고 수정에는 닫혀 있어야 한다.
- 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계 되어야함
• 리스코프치환원칙(Liskov Substitution Principle)
-자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다
- 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만
수행하도록 해야 한다.
• 인터페이스분리원칙(Interface Segregation Principle)
- 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 함.
- 하나의일반적인인터페이스보다여러개의구체적인인터페이스가낫다
• 의존관계역전원칙(Dependency Inversion Principle)
- 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화
하기 어려운 것, 거의 변화가 없는 것에 의존해야 한다.
- 구체적인 클래스보다는 인터페이스나 추상 클래스와 관계를 맺어야 한다.
OOP5원칙(SOLID)
5. 1. Class
5. Class & Object
• Class :-분류또는종류라고하는동종의모임
• Instance :구체적인것(Class의생성자로객체를만드는과정:Instance 화 )
“ 객체 지향의 가장 기본적인 구조는 Class, 대등한 요소로는 Instance “
5-2. Class
Class
• Class :-일반Class, 추상 Class
• Interface
문법 요소
Class
Class Abstract Class
Interface
Class 구조
package ….
import ….
class 클래스명 { … }
public class 클래스명 {
int member = 5; // 필드
public 클래스명 (매개변수) { … } // 생성자
public 자료형 메서드명(매개변수) { ….. } // 메서드
class 이너클래스명 { …. } // innerClass
}
클래스 외부 구성 요소
클래스 내부 구성 요소
Class 구조 설명
• 외부 구성 요소
- package :자바Class 를모아놓은디렉토리
- import :다른package를사용할때포함해야함
- class :external class로public를키워드를붙일수
• 내부 구성 요소
- field : Class의 속성, Class내부에서 사용 하는 변수
- constructor :객체를생성하는역할담당. 생략하면기본생성자자동생김
- method :Class가 가지고 있는 기능(함수)
- innerClass :Class내부에 있는 Class
7. 2. 절차적 프로그램 구조와 차이점
5. Class & Object
5-2. Class
프로그램 구조적 차이
절차적 프로그램
함수 x
( 서브루틴 )
전역 변수 a
전역 변수 b
객체지향 프로그램
Class A
인스턴스 변수
지역 변수
함수 x
( 서브루틴 )
지역 변수
함수 x
( 서브루틴 )
지역 변수
함수 x
( 서브루틴 )
지역 변수
메서드 x
지역 변수
메서드 x
지역 변수
Class B
인스턴스 변수
메서드 x
지역 변수
메서드 x
지역 변수
접근 지정자에 따
라서 접근 가능
* Class B 객체 생
성 후 사용 가능 *
외부 함수
사용 선언
static 선업 시
바로 접근 가능
Class의생성자로객체를만드는과정 -> 인스턴스화
인스턴스
Class
8. 3. Instance
5. Class & Object
5-2. Class
객체 생성
• 클래스(Class )의생성자로객체(Object )를만드는과정을인스턴스화(Instantiation )이라하며이과정에서만들어진객체를인스턴스( Instance )객체라함
객체생성
클래스명 참조변수명 = new 생성자();
메모리구조
인스턴스
메서드 영역
stack heap
100 Method
Field
Inner Class
Method
Heap에 object 할당
Stack에 변수 할당
100 번지
클래스
A a1 = new A();
A a2 = new A();
100 200
Object
A
100 번지 200 번지
Object
B
A
fun
class A {
void fun();
}
인스턴스
메서드 영역 stack heap
a1 a2
9. 1. Field
5. Class & Object
5-3. Field
Field
• 인스턴스변수(or멤버변수):클래스(Class )에포함된변수로클래스안에있는모든곳에서접근가능하다->클래스의전역변수
• 지역변수:메서드(Method )에포함된변수로해당메소드에서만유효함
Field 선언
private 자료형 변수이름 [ = 초기값 ]
메모리 구조
• 인스턴스변수는객체안에저장(heap)
• 지역변수는stack에저장
100
100 번지
메서드 영역 stack heap
인스턴스변수는초기값이강제설정됨
Variable 'localNum' might not have been initialized
✓ 지역변수는stack에저장되므로초기화없으면오류발생
20
num
num01
Object
Instance
sum
pNum
10. 1. Method
5. Class & Object
5-4. Method
Method
• 클래스의기능–Operation
Method 선언
자바제어자 반환Type Method명( 매개변수 ) {
실행 문 ;
[ return 값 ] // 반환 type 이 void 이면 생략
}
자바제어자
메서드 오버로딩 ( Method Overloading )
▪ 접근지정자 : 접근가능범위선언
-public, private, default, protected
▪ static :
- 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용
- 정적 멤버 ( Static Member )
- 객체 생성 없이 “객체명.정적멤버명“으로 사용
▪ final : 불변 값 표현
- 필드, 지역변수, 메서드, 클래스 앞에 위치 하며 각 의미가 틀림
▪ abstract :
- 기능을 정의 하지 않는 추상한 것을 상속 받은 곳에서 구현
- 추상 메서드(abstract method ), 추상 클래스 ( abstract class )
▪ 메서드 시그너처 ( Method signature )
-메서드명과입력매개변수로JVM은메서드명은같은데입력매개변수의개수
가틀리면다르게인식하는것을이용하는것으로이것을메서드 오버로딩
( Method Overloading )이라 함
가변 입력 매개 변수
▪ 배열입력 매개변수하고 하며, 여러 개의 입력 값을 하나로 전달"
▪ “ … “ 을 사용함
▪ 매개변수 : 입력 매개 변수로 복수인 경우 , 로 구분
자료형(Type) 매개변수이름 [ , 자료형(Type) 매개변수이름 ,… ]
반환Type Method명( 자료형 …참조변수명 ) {
실행 문 ;
[ return 값 ] // 반환 type 이 void 이면 생략
}
접근 지정자 접근(사용) 가능 범위
public 동일 패키지의 모든 메서드 + 다른 패키지의 모든 클래스
protected 동일 패키지의 모든 메서드 + 다른 패키지의 자식 클래스
default ( or package ) 동일 패키지의 모든 메서드 ( 접근 지정자 생략 가능 )
private 동일 클래스
15. 1. Inner Class
5. Class & Object
5-6. Inner Class
Inner Class
• 클래스내부에있는클래스를의미함.
• 클래스멤버:인스턴스멤버이너클래스,정적 멤버 이너클래스
• 지역변수:지역이너클래스로 한정적으로사용
인스턴스 멤버 이너 클래스
(1)
(2)
(3)
(4)
(5)
16. 1. Package
5. Class & Object
5-7. Package
Package
• 비슷한목적으로생성된 클래스파일을모아둔폴더
- 물리적으로하나의디렉터리를의미
• 하나의패키지에속한클래스나인터페이스파일은모두해당패키지이름의
디렉터리에포함
• 패키지는다른패키지를포함할수있으며,이때디렉터리의계층구조는점(.)으로구분
“서로 관련이 있는 클래스나 인터페이스를 함께 묶음, 클래스와 인터페이스의 집합“
package 패키지이름
Import
• 자바컴파일러에코드에서사용할클래스의패키지에대한정보를미리제공하는역할
- import문을사용하면다른패키지에속한클래스를패키지이름을제외한클래스이
름만으로사용
• 선언시별표(*)의미는하위패키지의모든Package의Class까지포함해 주는것
이아님
- 해당폴더에있는Class에대해서만이름만으로사용가능하다는의미
import 패키지이름.클래스이름;
import 패키지이름.*;
동일 package : import 생략
다른 Package : Full Package Class 명
다른 Package : * 사용 : Class 이름만 사용
17. 1. 자바 제어자
• 접근지정자 : 접근가능범위선언
-public, private, default, protected
• static :
- 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용
- 정적 멤버 ( Static Member )
- 객체 생성 없이 “객체명.정적멤버명“으로 사용
• final : 불변 값 표현
- 필드, 지역변수, 메서드, 클래스 앞에 위치 하며 각 의미가 틀림
• abstract :
- 기능을 정의 하지 않는 추상한 것을 상속 받은 곳에서 구현
- 추상 메서드(abstract method ), 추상 클래스 ( abstract class )
접근 지정자 접근(사용) 가능 범위
public 동일 패키지의 모든 메서드 + 다른 패키지의 모든 클래스
protected 동일 패키지의 모든 메서드 + 다른 패키지의 자식 클래스
default ( or package ) 동일 패키지의 모든 메서드 ( 접근 지정자 생략 가능 )
private 동일 클래스
9. Modifier
9-1. Modifier
자바 제어자
• 클래스 : public, default, final, abstract
• 메서드 : public, protected, default, private, final, abstract, static
• 멤버변수 : public, protected, default, private, final, static
• 지역변수 : final
➢ 사용가능한 제어자
• 메서드에 static과 abstract를 함께 사용할 수 없다.
• 클래스에 abstract와 final을 동시에 사용할 수 없다.
• abstract메서드의 접근 제어자가 private일 수 없다.
• 메서드에 private와 final을 같이 사용할 필요는 없다.
➢ 사용시주의사항
➢ 접근제어자(access modifier)
18. 1. 접근지정자
5. Class & Object
5-6. 자바 제어자
접근 지정자
• 멤버,생성자,메서드를접근하기위한지정자로선언한지정자에
따라서접근범위가결정된다.
X
X
X
접근 지정자 접근(사용) 가능 범위
public 동일 패키지의 모든 메서드 + 다른 패키지의 모든 클래스
protected 동일 패키지의 모든 메서드 + 다른 패키지의 자식 클래스
default ( or package ) 동일 패키지의 모든 메서드 ( 접근 지정자 생략 )
private 동일 클래스
19. 2. static
5. Class & Object
5-6. 자바 제어자
static Field
• 클래스의멤버(필드,메서드,이너클래스)에사용
• 정적멤버(StaticMember)
• 객체생성없이“객체명.정적멤버명“으로 사용
메서드 영역 stack heap
num : 10
100
vNum :1
staticMember
( instance )
100 번지
StaticMember
( Class ) static
JVM
메모리 할당
Method 영역 Stack 영역 Heap 영역
Class 영역 Static 영역 Final 영역
✓ Static Member (정적변수)는인스턴스객체로 각각생성이되어도값은공유한다.
메서드 영역
stack
heap
StaticMember
sraticNum : 5
staticMember01 : 100
staticMember02 : 200
vNum :1 vNum :2
staticMember staticMember
20. 2. static
5. Class & Object
5-7. 자바 제어자
static Method
• 정적메서드(StaticMember),객체생성없이“객체명.정적Method()“으로사용
• 인스턴스변수는사용불가,메서드내부에서객체를생성하여사용하는경우는객체의인스턴스변수사용가능
메서드 영역
stack
heap
staticMethod : 100
num : 1
mnum :10
snum
인스턴스 영역
instanceMethod()
Static 영역
staticMethod()
snum 10
21. 2. static
5. Class & Object
5-7. 자바 제어자
static 초기화 블럭
• 객체생성이전에static field는초기화되지않는다.(몰론선언과동시에초기화하는경우제외)
• static블록을사용하여초기화한다.->메모리에Class가로딩되는시점에가장먼저실행됨
• Referencevariable는재할당할수없지만요소는변경가능하다.
22. 3. final
5. Class & Object
5-7. 자바 제어자
final
• Field, Local Variable, Method, Class 앞에위치하며,각각의의미가틀리다.
• Field, Local Variable 사용시 초기화를 하여야 한다.
위치 의미
Local Variable 값 변경 불가
Field 값 변경 불가
Method Override 불가
Class 상속 불가
✓ Field, Local Variable 예제
✓ 다음페이지
23. 3. final
5. Class & Object
5-7. 자바 제어자
final
✓ final Method
X
✓ final Class
24. 4. abstract
5. Class & Object
5-7. 자바 제어자
abstract
• 사전적의미“추상적인”으로추상메소드( Abstract Method )와추상클래스( Abstract Class )가 있다.
• 추상메서드( Abstract Method ): Method선언 만 하고 기능이 없는 미완성 Method로 상속 받은 객체에서 기능 구현하는 것으로 세미콜론( ; )을 끝나야 함
• 추상클래스( Abstract Class ) : 하나이상의 추상메소드( Abstract Method )가포함되어있는 Class로 new 로 직접 생성 할 수 없고 상속을 통해서 만 가능
선언 방법 : abstract 자료형 메서드명();
미완성 코드
완성 코드