39
객체지향 프로그래밍(1) 1 객체지향의 기본 개념 객체지향 프로그래밍(1) 1. 객체지향의 기본 개념 2. 클래스 선언 및 사용 3. 생성자, 클래스 접근 제어자 4 필드 메소드 접근 제어자 4. 필드 메소드 접근 제어자 5. this와 super 1

객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

객체지향 프로그래밍(1)1 객체지향의 기본 개념

객체지향 프로그래밍(1)1. 객체지향의 기본 개념

2. 클래스 선언 및 사용

3. 생성자, 클래스 접근 제어자

4 필드 및 메소드 접근 제어자4. 필드 및 메소드 접근 제어자

5. this와 super

1

Page 2: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

객체객체

객체란

▶보거나 만질 수 있는 사물 공간을 차지▶보거나 만질 수 있는 사물, 공간을 차지

하고 있는 물질적인 사물

프로그래밍 분야에서의 객체밍

▶실세계의 문제 영역에 존재하는 대상물

을 소프트웨어로 모델화한 것을 소프트웨어로 모델화한 것

▶추상적 개념까지 포함함▶추상적 개념까지 함함

2

Page 3: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

객체의 예객체의 예

객체객체 car1car1

메소드데이터

객체객체 car1car1

메소드데이터

속력 : 65km/h 가속 / 감속승차인원 : 3명연료량 : 32리터

승차 / 하차연료주입

기어위치 : 4단 현재 인원은?

3

Page 4: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

객체와 클래스객체와 클래스

클래스▶공통적 특징을 갖는 객체들을 추▶공통적 특징을 갖는 객체들을 추

상화한 개념

▶클래스는 참조형

객체가 가지는 데이터와 메소드를객체가 가지는 데이터와 메소드를정의

4

Page 5: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

객체와 클래스객체와 클래스

▶클래스를 통한 객체의 생▶클래스를 통한 객체의 생성을 instantiation이라함

클래스는 객체 생성을 위클래 는 객체 생성을 위한 템플릿

객체는 클래스의 인스탄스객체는 클래스의 인스탄스

▶자바의 인터페이스▶자바의 인터페이스

추상 메소드와 상수로 구성된 추상 클래스성된 추상 클래스

5

Page 6: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

상속상속

클래스간의 관계

▶기존 클래스의 특성과 함께 고유▶기존 클래스의 특성과 함께 고유한 특성을 가지고 있는 클래스 정의의

포유류

고래 사람

6

Page 7: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

상속상속

▶수퍼 클래스

서로 다른 클래스들의 공통적 특성과서로 다른 클래스들의 공통적 특성과기능을 추상화한 것

▶수퍼 클래스와 서브 클래스

부모/자식 클래스 베이스/유도 클래부모/자식 클래스, 베이스/유도 클래스

7

Page 8: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

다형성다형성

▶같지만 다른것, 다르지만 같은 것

은 하: 같은 수퍼 클래스를 상속하는 서로 다른 클래스들의 개별 기능은거시적으로는 같지만 미시적으로는 서로 달라 질 수 있음는 서로 달라 질 수 있음

▶예

이질적 객체 리스트

메소드 오버라이딩, 메소드 오버로딩딩, 딩

8

Page 9: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

다형성다형성

drawdrawdrawdraw

도형 도형 p;

p=new 타원();drawdrawdrawdraw

p.draw();

dd

사각형

dd

타원

dd

삼각형

drawdrawdrawdraw drawdraw

9

Page 10: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스 선언클래스 선언

기본 문법< 어 > < 이 ><접근제어자> class <클래스 이름> {

<필드 선언>;

<메소드 선언>;

}

▶접근제어자

public, abstract, final, 생략public, abstract, final, 생략

10

Page 11: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스 선언클래스 선언

public class Electronics {

private int nVoltage = 0; //필드

public void turnOn(int nInputVoltage) { //메소드

V lt I tV ltnVoltage = nInputVoltage;

}

public void turnOff() { nVoltage = 0; }public void turnOff() { nVoltage = 0; }

public int getVoltage() { return nVoltage; }

}}}

11

Page 12: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스의 상속클래스의 상속

▶수퍼 클래스의 필드와 메소드를 상속

오▶서브 클래스에서 메소드 오버라이딩가능

접근 제어자, 반환형, 이름, 매개 변수가일치해야 함일치해야 함

▶클래스의 상속은 단일 상속만 가능

인터페이스는 다중 상속 가능

12

Page 13: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스의 상속클래스의 상속

public class TV extends Electronics {

private int nSize = 0;p

public void setSize(int new_size) {

nSize = new_size; _

}

public int getSize() { return nSize; }public int getSize() { return nSize; }

}

13

Page 14: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스의 사용클래스의 사용

▶구체적이고 실체가 있는 객체의생성생성

클래스는 객체들을 일반화한 추상적개념개념

클래스 유형 변수를 선언한 후 객체를 생성하여야 함를 생성하여야 함

▶객체의 생성이란?▶객체의 생성이란?

메모리에 객체를 위한 공간을 할당받고 초기값을 저장하는 것고 초기값을 저장하는 것

14

Page 15: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

변수 선언과 객체의 생성변수 선언과 객체의 생성

클래스형 변수의 선언

Electronics b;

bb객체객체

객체의 생성bb

생성▶new <클래스 이름>();

b = new Electronics();

15

Page 16: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

16

Page 17: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

17

Page 18: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

18

Page 19: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

생성자생성자

▶객체가 생성될 때 실행되는 메소드▶객체가 생성될 때 실행되는 메소드

▶이름이 클래스 이름과 같은 메소드

반환형이 없음

▶필드 값 초기화, 메모리 할당 등의 작업,

▶여러 생성자 가능매개 변수로 구분함매개 변수로 구분함

기본 생성자란?기본 생성자란?▶인자 없는 생성자

▶아무 생성자도 없을 때는 자동으로 만들어짐19

Page 20: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스 선언과 생성자클래스 선언과 생성자class Circle { c ass C c e {

int r;public Circle( ) { //기본 생성자

r = 0 ;}}public Circle(int a) {

r = a; }

r}public double getArea() {

return r * r * 3.14; }}

}

public class CircleArea2 { public static void main(String args[]) {public static void main(String args[]) {

Circle c = new Circle(5);System.out.println(c.getArea());

} }

20

Page 21: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스 선언과 사용class Cylinder {

클래스 선언과 사용

Circle c; //원int h; //높이public Cylinder(Circle a, int b) { //생성자

c = a;h = b;

}bli d bl tV l () { //부피 구하기 hpublic double getVolume() { //부피 구하기

return c.getArea() * h;}

}

r

h

}public class CylinderVolume {

public static void main(String args[]) {Circle c = new Circle(7); //원 생성Circle c = new Circle(7); //원 생성Cylinder cy = new Cylinder(c, 8); //원기둥 생성System.out.println(cy.getVolume());

}}}

21

Page 22: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

22

Page 23: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

23

Page 24: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

24

Page 25: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스의 접근 제어자클래스의 접근 제어자

▶해당 클래스를 사용할 수 있는 외부 범위를 지정위를 지정

? class Circle { … }

▶public

{ }

어디서나 상속과 참조가 가능

▶생략되는 경우▶생략되는 경우

같은 패키지 안에서만 상속과 참조가 가능

25

Page 26: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

클래스의 접근 제어자클래스의 접근 제어자

▶abstract

몸체가 없는 메소드가 존재하는 경우몸체가 없는 메소드가 존재하는 경우

객체를 생성시킬 수 없으며 상속만 가능

▶final

상속이 불가능상속이 불가능

abstract와 같이 사용할 수 없음

26

Page 27: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

필드 선언필드 선언

▶객체의 상태를 저장하는 변수▶객체의 상태를 저장하는 변수

필드 접근 제어자필드 접근 제어자▶필드를 사용할 수 있는 외부 범위를▶필드를 사용할 수 있는 외부 범위를

지정 class Circle { ? int r;? int r;

…}

▶private

선언된 클래스 내부에서만 사용 가능선언된 클래스 내부에서만 사용 가능27

Page 28: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

필드 선언필드 선언

필드 접근 제어자필드 접근 제어자▶생략▶생략

같은 패키지에서 사용 가능

package 접근 수준이라 함package 접근 수준이라 함

▶protected

같은 패키지와 서브 클래스에서 사용가능가능

▶public

어디서나 참조 가능어디서나 참조 가능28

Page 29: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

필드 선언필드 선언

필드 접근 제어자▶static

클래스 내의 모든 객체들이 공유하는 변수클래스 내의 모든 객체들이 공유하는 변수

객체 생성 없이 접근 가능

정적 변수 클래스 변수라고 함정적 변수, 클래스 변수라고 함

▶final

초기화 후에는 값을 바꿀 수 없음

29

Page 30: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

메소드 선언메소드 선언

메소드 접근 제어자▶public, protected, 생략, private

▶static 메소드▶static 메소드

클래스 메소드, 객체 없이 호출 가능

인스탄스 메소드를 호출하거나 인스탄스

Integer.parseInt(i);

인스탄스 메소드를 호출하거나 인스탄스필드를 참조할 수 없다

필 를 제어하는 기능static 필드를 제어하는 기능30

Page 31: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

메소드 선언메소드 선언

메소드 접근 제어자▶final

상속은 가능하나 재정의 할 수 없음상속은 가능하나 재정의 할 수 없음

▶abstract

몸체가 없고 signature만 존재

▶synchronized▶synchronized

다중 스레드 프로그램에서 동기화가필요한 메소드임을 표시하는 것필요한 메소드임을 표시하는 것

31

Page 32: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

32

Page 33: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

33

Page 34: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

this와 superthis와 super

thithis▶인스탄스 메소드에서 사용▶인 탄 메 에서 사용

▶메소드가 속하는 객체의 참조값을 가짐

super▶ 찬 현 참 을▶마찬가지로 현재 객체의 참조값을 가

지나 자료형이 직계상위 클래스 유형임

상위 클래스에서 정의된 같은 이름의필드를 참조할 때필 를 참 할 때

34

Page 35: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

class SuperClass {public double x;public double x;

}class SubClass extends SuperClass {

double x;double x;public SubClass(double new_x) {

this.x = new_x;super x = new x * 10;super.x = new_x * 10;

}public double getSuper() { return super.x; }public double getSub() {return this.x; }public double getSub() {return this.x; }

}public class Test {

public static void main(String args[]) {pub c s a c o d a (S g a gs[]) {SubClass subclass = new SubClass(10);System.out.println(subclass.x);System.out.println(subclass.getSuper());System.out.println(subclass.getSub());

}}

35

Page 36: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

this( )와 super( )this( )와 super( )

▶ 출▶생성자 몸체의 맨 앞에서 호출

super()▶상위 클래스의 생성자를 명시적으로 호출

▶명시적 호출이 없다면 자동으로 상위클래스의기본 생성자 호출기본 생성자 호출

this()▶다른 생성자를 호출▶다른 생성자를 호출

참고▶super.method()

하위 클래스에서 재정의 당한 상위 클래스 메소드를 호출소드를 호출

36

Page 37: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

상속과 생성자

class SuperClass {

상속과 생성자

class SuperClass {private double x;public SuperClass(double new_x) {

this x = new x * 10;this.x new_x * 10;}public double getX() { return x; }

}}class SubClass extends SuperClass {

double x;public SubClass(double new_x) {p ( _ ) {

super(new_x); //SuperClass 생성자 호출x = new_x;

}

super();

public double getSuper() { return super.getX();}public double getX() { return this.x; }

}

37

Page 38: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

38

Page 39: 객체지향프로그래밍(1) - cs.kangwon.ac.krysmoon/courses/2011_1/android/05.pdf · 객체 객체란 보거나 만질 수 있는 사물, 공간을 차지 하고 있는 물질적인

39