SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
객체와 클래스
창원대학교 정보통신공학과
Mobile-X 허 서 영
지도교수 : 박동규
2015. 11. 24
객체 지향 언어
• 기존의 프로그래밍언어와 큰 차이 없음
• 코드의 재사용성
• 코드의 관리 용이
• 신뢰성 높은 프로그램의 개발 가능
객체와 인스턴스
• 객체 ≒ 인스턴스
- 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미
• 인스턴스화 (instantiate)
- 클래스로부터 인스턴스를 생성하는 것.
책상은 객체다. 책상을 책상클래스의 인스턴스다.
객체의 구성
• 객체의 멤버
1. 객체의 속성 ( 필드 )
ex) 크기, 길이, 높이, 색상, 볼륨, 채널 등
2. 객체의 기능 (메서드)
ex) 켜기, 끄기, 볼륨 높이기, 채널 높이기 등
객체의 멤버
기능 (메서드)속성 (필드)
class Tv {
String color ;
boolean power ;
int change ;
void Power () { power = !power ; }
void ChannelUp () { channel++ ; }
void ChannelDown () { channel— ; }
인스턴스의 생성과 사용
• 인스턴스의 생성방법
클래스명 참조변수명 ;
참조변수명 = new 클래스명 ( ) ;
Tv bluelay ;
bluelay = new Tv ( ) ;
bluelay.channel = 7 ;
bluelay.ChannelDown () ;
System.out.printf ( t.channel );
// 객체생성 후 ,생성된 객체의
주소를 참조변수에 저장
// 객체를 다루기 위한 참조변수 선언
null
FALSE
0
Power ()
ChannelUp ()
ChannelDown ()
0x100
color
power
channel
0x100t
클래스 또 다른 정의
1. 데이터와 함수의 결합
변수 배열 구조체 클래스
1
2
3
1
2
a’
1 1
2
a’
+ 함수
‣ 변수 - 하나의 데이터를 저장할 수 있는 공간
‣ 배열 - 같은 타입의 여러 데이터를 저장할 수 있는 공간
‣ 구조체 - 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간
‣ 클래스 - 데이터와 함수의 결합 ( 구조체 + 함수 )
2. 사용자 정의 타입 ( User-defined type )
- 개발자가 직접 새로운 타입을 정의할 수 있음
- 서로 관련된 값을 묶어서 하나의 타입으로 정리
class Time () {
int hour ;
int minute ;
int second ;
}
int hour ;
int minute ;
int second ;
int hour1, hour2, hour3 ;
int minute1, minute2, minute3 ;
int second1, second2, second3 ;
Time t = new Time ();
Time t1 = new Time ();
Time t2 = new Time ();
Time t3 = new Time ();
int[] hour = new int[3];
int[] minute = new int[3];
int[] second = new int[3];
Time[] t = new Time [3];
t[0] = new Time[];
t[1] = new Time[];
t[2] = new Time[];
0 0 0
hour[0] hour[1] hour[2]
0x1000
0 0 0
minute[0] minute[1] minute[2]
0x2000
0 0 0
second[0] second[1] second[2]
0x3000
0x1000
hour
0x2000
minute
0x3000
second
0 0 0
hour[0] hour[1] hour[2]
0x1000
0 0 0
minute[0] minute[1] minute[2]
0x2000
0 0 0
second[0] second[1] second[2]
0x3000
0x100
0x200
0x300
t[0]
t[1]
t[2]
0x010
0x010t
생성자
• 생성자란?
- 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 매서드
- 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용
- 몇가지 조건을 제외하고는 메서드와 같음
- 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 함
๏ 인스턴스 초기화 - 인스턴스 변수에 적절한 값을 저장하는 것
Card c = new Card () ;

1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다.
2. 생성자 Card()가 호출되어 수행한다.
3. 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
• 생성자 조건
- 생성자의 이름은 클래스의 이름과 같아야함
- 생성자는 리턴값이 없음 (그러나 void는 쓰지 않음)
class Card {
…
Card ( ) { // 매개변수가 없는 경우
… // 인스턴스 초기화 작업
}
Card ( String kind, int number) { // 매개변수가 있는 생성자
… // 인스턴스 초기화 작업
}
}
• 기본 생성자 (default constructor)
- 매개변수가 없는 생성자
- 클래스에 생성자가 없으면 컴파일러가 기본 생성자를 추가
클래스 이름 () {
Card ( ) { … } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다.
class Data1 {
int value ;
}
class Data2 {
int value ;
Data2 ( int x ) {
value = x ;
}
}
class ConstructorTest {
public static void main ( String[] args ) {
Data1 d1 = new Data1 ;
Data2 d2 = new Data2 ;
}
}
모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다
Data1 클래스의 경우에는 생성자를 만들었지 않으므로
컴파일러가 기본 생성자를 추가
class Data1 {
int value;
Data1 () {} // 기본 생성자
}
• 생성자를 이용한 인스턴스의 복사
class Car {
String color ;
String gearType ;
int door ;
Car () {
this (“white”, “auto”, 4);
}
Car ( Car c ) {
color = c.color ;
gearType = c.gearType ;
door = c.door ;
}
Car ( String color, String gearType, int door ) {
this.color = color ;
this.gearType = gearType ;
this.door = door ;
}
}
class CarTest {
public static void main ( String[] args ) {
Car c1 = new Car () ;
Car c2 = new Car ( c1 ) ;
System.out.println ( “c1의 color=“ + c1.color
+ “, gearType=“ + c1.gearType + “, door=“ + c1.door ) ;
System.out.println ( “c2의 color=“ + c2.color
+ “, gearType=“ + c2.gearType + “, door=“ + c2.door) ;
c1.door = 100 ;
System.out.println ( “c1의 color=“ + c1.color
+ “, gearType=“ + c1.gearType + “, door=“ + c1.door ) ;
System.out.println ( “c2의 color=“ + c2.color
+ “, gearType=“ + c2.gearType + “, door=“ + c2.door) ;
}
}
필드와 메서드
• 필드 ( 멤버 변수 )
‣ 인스턴스 변수 ( instance variable )
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능
- 인스턴스 생성 후, ‘참조 변수.이스턴스변수명’ 으로 접근
- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 떄 가비지컬렉터에 의해 자동제거됨
‣ 클래스 변수 ( class variable )
- 같은 클래스의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 ‘클래스이름.클래스변수명’ 으로 접근
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
‣ 지역 변수 ( local variable )
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
- 조건문, 반복문의 블럭 {} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
• 클래스변수와 인스턴스변수
‣ 인스턴스변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을
유지할 수 있지만, 클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상
공통된 값을 가짐
속성
무늬
숫자
폭
높이
기능 …
class Card {
String kind ; // 무늬
int number ; // 숫자
static int width = 100 ; // 폭
static int height = 250 ; // 높이
}
• 메서드 ( 멤버 함수 )
‣ 메서드란?
- 작업을 수행하기 위한 명령문의 집합
- 어떤 값을 입력받아서 처리하고 그 결과를 돌려줌
(입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있음)
‣ 메서드의 장점과 작성규칙
- 반복적인 코드를 줄이고 코드의 관리가 용이
- 반복적으로 수행되는 여러 문장을 메서드로 작성
- 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 게 좋음
- 관련된 여러 문장을 메서드로 작성
int add ( int a, int b ) { // 리턴타입 메소드이름 ( 타입 변수명, 타입 변수명, ... )
int result = a + b ; // 메서드 호출시 수행될 코드
return result ; // 호출한 메서드로 결과를 반환
}
void power () { // 반환값이 없는 경우 리턴타입 대신 void를 사용
power = !power ;
}
• return 문
‣ 메서드가 정상적으로 종료되는 경우
- 메서드의 블럭{}의 끝에 도달했을 때
- 메서드의 블럭{}을 수행 도중 return문을 만났을 때
‣ return 문
- 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아옴
‣ 반환값이 있는 메서드는 모든 경우에 return 문이 있어야함
‣ return 문의 개수는 최소화하는 것이 좋음
int max ( int a, int b ) {
if ( a > b )
return a ;
}
int max ( int a, int b ) {
if ( a > b )
return a ;
else
return b ;
}
int max ( int a, int b ) {
if ( a > b )
return a ;
else
return b ;
}
int max ( int a, int b ) {
int result = 0 ;
if ( a > b )
result a ;
else
result b ;
return result ;
}
• 메서드 호출
‣ 메서드 호출방법
- 참조변수.메서드 이름 () ;
- 참조변수.메서드 이름 ( 값 1 , 값 2 , ... ) ;
class MyMath {
long add ( long a, long b ) {
long result = a + b ;
return result ;
}
…
}


MyMath mm = new MyMath ( ) ;
long value = mm.add ( 1L, 2L ) ;
• 재귀 호출 ( recursive call )
- 메서드 내에서 자기자신을 반복적으로 호출하는 것
- 재귀호출은 반복문 보다 성능은 나쁘나 이해하기 쉽고 간결한 코드를 작성할 수 있음.
팩토리얼 (factorial)
5! = 5 * 4 * 3 * 2 * 1
f ( n ) = n * f ( n-1 ) 단, f ( 1 ) = 1
long factorial ( int n ) {
long result = 0 ;
if ( n==1 ) {
result = 1 ;
} else {
result = n * factorial ( n-1 ) ;
}
return result ;
}
창원대학교 정보통신공학과
Mobile-X 허 서 영
이상으로 마치겠습니다.
수고 하셨습니다.

Contenu connexe

Tendances

Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409Yong Joon Moon
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째Jaeseok Park
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Leonardo YongUk Kim
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개Terry Cho
 
MNIST for ML beginners
MNIST for ML beginnersMNIST for ML beginners
MNIST for ML beginners홍배 김
 
통계자료분석을 ㅇ
통계자료분석을 ㅇ통계자료분석을 ㅇ
통계자료분석을 ㅇYoonwhan Lee
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Circulus
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 RYoonwhan Lee
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조영기 김
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석용 최
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: FunctionChan Shik Lim
 
[Swift] Protocol (2/2)
[Swift] Protocol (2/2)[Swift] Protocol (2/2)
[Swift] Protocol (2/2)Bill Kim
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기Yong Joon Moon
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 

Tendances (20)

Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409파이썬+Operator+이해하기 20160409
파이썬+Operator+이해하기 20160409
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?Realm은 어떻게 효율적인 데이터베이스를 만들었나?
Realm은 어떻게 효율적인 데이터베이스를 만들었나?
 
Template at c++
Template at c++Template at c++
Template at c++
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
 
MNIST for ML beginners
MNIST for ML beginnersMNIST for ML beginners
MNIST for ML beginners
 
통계자료분석을 ㅇ
통계자료분석을 ㅇ통계자료분석을 ㅇ
통계자료분석을 ㅇ
 
Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체Startup JavaScript 4 - 객체
Startup JavaScript 4 - 객체
 
통계자료 분석을 위한 R
통계자료 분석을 위한 R통계자료 분석을 위한 R
통계자료 분석을 위한 R
 
R intro
R introR intro
R intro
 
알고리즘과 자료구조
알고리즘과 자료구조알고리즘과 자료구조
알고리즘과 자료구조
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
[Swift] Protocol (2/2)
[Swift] Protocol (2/2)[Swift] Protocol (2/2)
[Swift] Protocol (2/2)
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 

En vedette

9 object class
9 object class9 object class
9 object class웅식 전
 
10장 클래스
10장 클래스10장 클래스
10장 클래스kidoki
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)유석 남
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의Kwangyoun Jung
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 

En vedette (10)

presentation (1)
presentation (1)presentation (1)
presentation (1)
 
9 object class
9 object class9 object class
9 object class
 
10장 클래스
10장 클래스10장 클래스
10장 클래스
 
08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)08장 객체와 클래스 (기본)
08장 객체와 클래스 (기본)
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
2010 우양annul report
2010 우양annul report2010 우양annul report
2010 우양annul report
 

Similaire à 5장 객체와클래스

Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉HyunJoon Park
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 명신 김
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++KWANGIL KIM
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)유익아카데미
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureKwang Woo NAM
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2Chris Ohk
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features SummaryChris Ohk
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
Linq to object using c#
Linq to object using c#Linq to object using c#
Linq to object using c#병걸 윤
 

Similaire à 5장 객체와클래스 (20)

강의자료 2
강의자료 2강의자료 2
강의자료 2
 
6 function
6 function6 function
6 function
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉Modern C++의 타입 추론과 람다, 컨셉
Modern C++의 타입 추론과 람다, 컨셉
 
불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14 불어오는 변화의 바람, From c++98 to c++11, 14
불어오는 변화의 바람, From c++98 to c++11, 14
 
06장 함수
06장 함수06장 함수
06장 함수
 
포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
코딩인카페 C&JAVA 기초과정 C프로그래밍(3)
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structure
 
C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2C++17 Key Features Summary - Ver 2
C++17 Key Features Summary - Ver 2
 
3주차 스터디
3주차 스터디3주차 스터디
3주차 스터디
 
[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary[C++ Korea 2nd Seminar] C++17 Key Features Summary
[C++ Korea 2nd Seminar] C++17 Key Features Summary
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
Design patterns
Design patternsDesign patterns
Design patterns
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
Linq to object using c#
Linq to object using c#Linq to object using c#
Linq to object using c#
 
8.다중메서드
8.다중메서드8.다중메서드
8.다중메서드
 
Java stream v0.1
Java stream v0.1Java stream v0.1
Java stream v0.1
 

5장 객체와클래스

  • 1. 객체와 클래스 창원대학교 정보통신공학과 Mobile-X 허 서 영 지도교수 : 박동규 2015. 11. 24
  • 2. 객체 지향 언어 • 기존의 프로그래밍언어와 큰 차이 없음 • 코드의 재사용성 • 코드의 관리 용이 • 신뢰성 높은 프로그램의 개발 가능
  • 3. 객체와 인스턴스 • 객체 ≒ 인스턴스 - 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미 • 인스턴스화 (instantiate) - 클래스로부터 인스턴스를 생성하는 것. 책상은 객체다. 책상을 책상클래스의 인스턴스다.
  • 4. 객체의 구성 • 객체의 멤버 1. 객체의 속성 ( 필드 ) ex) 크기, 길이, 높이, 색상, 볼륨, 채널 등 2. 객체의 기능 (메서드) ex) 켜기, 끄기, 볼륨 높이기, 채널 높이기 등 객체의 멤버 기능 (메서드)속성 (필드) class Tv { String color ; boolean power ; int change ; void Power () { power = !power ; } void ChannelUp () { channel++ ; } void ChannelDown () { channel— ; }
  • 5. 인스턴스의 생성과 사용 • 인스턴스의 생성방법 클래스명 참조변수명 ; 참조변수명 = new 클래스명 ( ) ; Tv bluelay ; bluelay = new Tv ( ) ; bluelay.channel = 7 ; bluelay.ChannelDown () ; System.out.printf ( t.channel ); // 객체생성 후 ,생성된 객체의 주소를 참조변수에 저장 // 객체를 다루기 위한 참조변수 선언 null FALSE 0 Power () ChannelUp () ChannelDown () 0x100 color power channel 0x100t
  • 6. 클래스 또 다른 정의 1. 데이터와 함수의 결합 변수 배열 구조체 클래스 1 2 3 1 2 a’ 1 1 2 a’ + 함수 ‣ 변수 - 하나의 데이터를 저장할 수 있는 공간 ‣ 배열 - 같은 타입의 여러 데이터를 저장할 수 있는 공간 ‣ 구조체 - 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간 ‣ 클래스 - 데이터와 함수의 결합 ( 구조체 + 함수 )
  • 7. 2. 사용자 정의 타입 ( User-defined type ) - 개발자가 직접 새로운 타입을 정의할 수 있음 - 서로 관련된 값을 묶어서 하나의 타입으로 정리 class Time () { int hour ; int minute ; int second ; } int hour ; int minute ; int second ; int hour1, hour2, hour3 ; int minute1, minute2, minute3 ; int second1, second2, second3 ; Time t = new Time (); Time t1 = new Time (); Time t2 = new Time (); Time t3 = new Time (); int[] hour = new int[3]; int[] minute = new int[3]; int[] second = new int[3]; Time[] t = new Time [3]; t[0] = new Time[]; t[1] = new Time[]; t[2] = new Time[]; 0 0 0 hour[0] hour[1] hour[2] 0x1000 0 0 0 minute[0] minute[1] minute[2] 0x2000 0 0 0 second[0] second[1] second[2] 0x3000 0x1000 hour 0x2000 minute 0x3000 second 0 0 0 hour[0] hour[1] hour[2] 0x1000 0 0 0 minute[0] minute[1] minute[2] 0x2000 0 0 0 second[0] second[1] second[2] 0x3000 0x100 0x200 0x300 t[0] t[1] t[2] 0x010 0x010t
  • 8. 생성자 • 생성자란? - 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 매서드 - 인스턴스 변수의 초기화 또는 인스턴스 생성시 수행할 작업에 사용 - 몇가지 조건을 제외하고는 메서드와 같음 - 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 함 ๏ 인스턴스 초기화 - 인스턴스 변수에 적절한 값을 저장하는 것 Card c = new Card () ;
 1. 연산자 new에 의해서 메모리(heap)에 Card클래스의 인스턴스가 생성된다. 2. 생성자 Card()가 호출되어 수행한다. 3. 연산자 new의 결과로, 생성된 Card인스턴스의 주소가 반환되어 참조변수 c에 저장된다.
  • 9. • 생성자 조건 - 생성자의 이름은 클래스의 이름과 같아야함 - 생성자는 리턴값이 없음 (그러나 void는 쓰지 않음) class Card { … Card ( ) { // 매개변수가 없는 경우 … // 인스턴스 초기화 작업 } Card ( String kind, int number) { // 매개변수가 있는 생성자 … // 인스턴스 초기화 작업 } }
  • 10. • 기본 생성자 (default constructor) - 매개변수가 없는 생성자 - 클래스에 생성자가 없으면 컴파일러가 기본 생성자를 추가 클래스 이름 () { Card ( ) { … } // 컴파일러에 의해 추가된 Card클래스의 기본 생성자. 내용이 없다. class Data1 { int value ; } class Data2 { int value ; Data2 ( int x ) { value = x ; } } class ConstructorTest { public static void main ( String[] args ) { Data1 d1 = new Data1 ; Data2 d2 = new Data2 ; } } 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다 Data1 클래스의 경우에는 생성자를 만들었지 않으므로 컴파일러가 기본 생성자를 추가 class Data1 { int value; Data1 () {} // 기본 생성자 }
  • 11. • 생성자를 이용한 인스턴스의 복사 class Car { String color ; String gearType ; int door ; Car () { this (“white”, “auto”, 4); } Car ( Car c ) { color = c.color ; gearType = c.gearType ; door = c.door ; } Car ( String color, String gearType, int door ) { this.color = color ; this.gearType = gearType ; this.door = door ; } } class CarTest { public static void main ( String[] args ) { Car c1 = new Car () ; Car c2 = new Car ( c1 ) ; System.out.println ( “c1의 color=“ + c1.color + “, gearType=“ + c1.gearType + “, door=“ + c1.door ) ; System.out.println ( “c2의 color=“ + c2.color + “, gearType=“ + c2.gearType + “, door=“ + c2.door) ; c1.door = 100 ; System.out.println ( “c1의 color=“ + c1.color + “, gearType=“ + c1.gearType + “, door=“ + c1.door ) ; System.out.println ( “c2의 color=“ + c2.color + “, gearType=“ + c2.gearType + “, door=“ + c2.door) ; } }
  • 12. 필드와 메서드 • 필드 ( 멤버 변수 ) ‣ 인스턴스 변수 ( instance variable ) - 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능 - 인스턴스 생성 후, ‘참조 변수.이스턴스변수명’ 으로 접근 - 인스턴스를 생성할 때 생성되고, 참조변수가 없을 떄 가비지컬렉터에 의해 자동제거됨 ‣ 클래스 변수 ( class variable ) - 같은 클래스의 모든 인스턴스들이 공유하는 변수 - 인스턴스 생성없이 ‘클래스이름.클래스변수명’ 으로 접근 - 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸 ‣ 지역 변수 ( local variable ) - 메서드 내에 선언되며, 메서드의 종료와 함께 소멸 - 조건문, 반복문의 블럭 {} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
  • 13. • 클래스변수와 인스턴스변수 ‣ 인스턴스변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 가짐 속성 무늬 숫자 폭 높이 기능 … class Card { String kind ; // 무늬 int number ; // 숫자 static int width = 100 ; // 폭 static int height = 250 ; // 높이 }
  • 14. • 메서드 ( 멤버 함수 ) ‣ 메서드란? - 작업을 수행하기 위한 명령문의 집합 - 어떤 값을 입력받아서 처리하고 그 결과를 돌려줌 (입력받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있음) ‣ 메서드의 장점과 작성규칙 - 반복적인 코드를 줄이고 코드의 관리가 용이 - 반복적으로 수행되는 여러 문장을 메서드로 작성 - 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 게 좋음 - 관련된 여러 문장을 메서드로 작성 int add ( int a, int b ) { // 리턴타입 메소드이름 ( 타입 변수명, 타입 변수명, ... ) int result = a + b ; // 메서드 호출시 수행될 코드 return result ; // 호출한 메서드로 결과를 반환 } void power () { // 반환값이 없는 경우 리턴타입 대신 void를 사용 power = !power ; }
  • 15. • return 문 ‣ 메서드가 정상적으로 종료되는 경우 - 메서드의 블럭{}의 끝에 도달했을 때 - 메서드의 블럭{}을 수행 도중 return문을 만났을 때 ‣ return 문 - 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아옴 ‣ 반환값이 있는 메서드는 모든 경우에 return 문이 있어야함 ‣ return 문의 개수는 최소화하는 것이 좋음 int max ( int a, int b ) { if ( a > b ) return a ; } int max ( int a, int b ) { if ( a > b ) return a ; else return b ; } int max ( int a, int b ) { if ( a > b ) return a ; else return b ; } int max ( int a, int b ) { int result = 0 ; if ( a > b ) result a ; else result b ; return result ; }
  • 16. • 메서드 호출 ‣ 메서드 호출방법 - 참조변수.메서드 이름 () ; - 참조변수.메서드 이름 ( 값 1 , 값 2 , ... ) ; class MyMath { long add ( long a, long b ) { long result = a + b ; return result ; } … } 
 MyMath mm = new MyMath ( ) ; long value = mm.add ( 1L, 2L ) ; • 재귀 호출 ( recursive call ) - 메서드 내에서 자기자신을 반복적으로 호출하는 것 - 재귀호출은 반복문 보다 성능은 나쁘나 이해하기 쉽고 간결한 코드를 작성할 수 있음. 팩토리얼 (factorial) 5! = 5 * 4 * 3 * 2 * 1 f ( n ) = n * f ( n-1 ) 단, f ( 1 ) = 1 long factorial ( int n ) { long result = 0 ; if ( n==1 ) { result = 1 ; } else { result = n * factorial ( n-1 ) ; } return result ; }
  • 17. 창원대학교 정보통신공학과 Mobile-X 허 서 영 이상으로 마치겠습니다. 수고 하셨습니다.