• 검색 결과가 없습니다.

객체지향과 클래스

N/A
N/A
Protected

Academic year: 2022

Share "객체지향과 클래스"

Copied!
43
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

객체지향과 클래스

[ 단원 05 ]

(2)

단원 05 객체지향과 클래스

학습목표

객체지향 프로그래밍에 대해 이해하고 설명할 수 있다.

객체지향과 절차적 프로그래밍 방식

클래스와 객체, • 추상화, 캡슐화, 상속, 다형성

클래스와 객체의 생성을 이해하고 프로그래밍에 활용할 수 있다.

클래스 생성 시 필드와 메소드의 구현

키워드 new를 사용한 객체의 생성

객체 변수에서 필드와 메소드 참조 방법

필드 참조 메소드인 getter와 setter 구현과 사용 방법

생성자 개념과 구현 방법을 이해하고 프로그래밍에 활용할 수 있다.

생성자의 필요성

생성자 구현 방법

생성자 오버로딩 개념과 구현 방법

다른 생성자 호출하기 위한 this()

키워드 static과 final의 사용 방법을 알고 활용할 수 있다.

클래스 소속을 위한 static

변수를 상수로 하기 위한 final

2

(3)

단원 05 객체지향과 클래스 3

1. 객체지향 프로그래밍의 이해

(4)

단원 05 객체지향과 클래스

객체지향 개요

❖ 객체지형 프로그래밍 언어

원조는 시뮬라(simula)라는 프로그래밍 언어

클래스라는 개념을 처음으로 도입

❖ 객체지향 프로그래밍

클래스(class)를 생성하고

클래스로부터 객체(object)를 만들어 객체 간의 상호작용을 이용하여 주어진 문제를 해 결하는 프로그래밍 방식

데이터인 필드와 절차인 메소드를 하나로 묶은 클래스 단위의 프로그램

4

Section 1 객체지향 프로그래밍의 이해 p148

(5)

단원 05 객체지향과 클래스

필드와 메소드

❖ 객체(object)

현실 세계의 사물이나 개념을 시스템에서 이용하기 위해 현실 세계를 자연스럽게 표현하여 손쉽게 이용할 수 있도록 만든 소프트웨어 모델

❖ 객체 = 속성(attributes, properties) + 행동(messages, behaviors)

속성

객체의 특성을 표현하는 정적인 성질

프로그래밍에서 속성은 필드(field)라 함

행동

객체 내부의 일을 처리
 하거나 객체들간의
 서로 영향을 주고 받는
 동적인 일을 처리하는 단위

행동은 


메소드(method)라 함

5

Section 1 객체지향 프로그래밍의 이해

(6)

단원 05 객체지향과 클래스

객체와 클래스

❖ 클래스

객체를 만들기 위한 모형이자 틀(template)

객체를 만들려면 반드시 객체의 다양한 특성을 표현할 수 있는 모형인 클래스가 필 요

❖ 객체

클래스의 구체적인 하나의 실례(instance)

객체와 클래스의 예

6

Section 1 객체지향 프로그래밍의 이해

(7)

단원 05 객체지향과 클래스

추상화

추상화(abstraction)

현실 세계의 사실에서 주어진 문제의 중요한 측면을 주목하여 설명하는 방식

실세계의 객체에서 불필요한 부분을 제거하여 필요한 부분만을 간결하고 이해하기 쉬운 클래스 로 만드는 작업

속성과 행동으로 추상화를 실현

7

Section 1 객체지향 프로그래밍의 이해

(8)

단원 05 객체지향과 클래스

캡슐화

❖ 캡슐화(encapsulation)

객체와 객체 간의 의사 소통을 위한 정보만을 노출

실제 내부 구현 정보는 숨기는 원리

추상화 과정에서 클래스를 정의할 때

객체의 자료와 행위를 클래스 단위로 하나로 묶고,

실제 내부 구현 내용을 외부에 감추는 것

❖ 정보 은닉(information hiding)이 발생

캡슐화 과정에서 클래스 내부 구현을 외부에 숨김

8

Section 1 객체지향 프로그래밍의 이해

(9)

단원 05 객체지향과 클래스

상속

❖ ‘ 물려받는다’라는 특징의 상속(inheritance)

객체지향의 가장 핵심이 되는 개념

프로그램을 쉽게 확장할 수 있도록 해주는 강력한 수단

상위 클래스와 하위 클래스 간의 관계: 계층도

상속 장점

공통의 특성을 하위 클래스마다 반복적으로 기술하지 않고 한 번만 기술하기 때문에 중복 을 줄여 재사용성의 효과

9

Section 1 객체지향 프로그래밍의 이해

(10)

단원 05 객체지향과 클래스

다형성

❖ 다형성(polymorphism)

원래 생물학적 용어로

여러(poly) 형태(morphy)를 의미

외부에 보이는 모습은 한 가지 형태이지만

실질적으로 쓰이는 기능은 여러 가지 역할을 수행한다는 의미

다형성의 예

오버로딩(overloading)이나 오버라이딩(overriding)

10

Section 1 객체지향 프로그래밍의 이해

(11)

단원 05 객체지향과 클래스 11

2. 클래스와 객체의 생성

(12)

단원 05 객체지향과 클래스

클래스의 필드 구현

❖ 필드 구현

신용카드를 추상화한 클래스 CreditCard를 구현

신용카드의 속성

카드번호 number, 소유자 owner 등을 고려

❖ 다양한 필드 지정자(수정자)

12

Section 2 클래스와 객체의 생성 p154

(13)

단원 05 객체지향과 클래스

필드의 기본 값

❖ 기본 값

선언 시 초기 값이 없으면

자동으로 저장되는 값

타입에 따라 기본이 되는 0

13

Section 2 클래스와 객체의 생성 p154

(14)

단원 05 객체지향과 클래스

객체 생성과 필드 참조 연산자

❖ 키워드 new

객체를 생성하기 위해서는

키워드 new 이후에 CreditCard()와 같이 생성자를 호출

❖ 필드 참조 연산자 .

참조형 변수인 myCard를 사용하여 필드 owner와 number를 참조

myCard.owner, myCard.number

14

Section 2 클래스와 객체의 생성

(15)

단원 05 객체지향과 클래스

실습예제

❖ 5-1

15

Section 2 클래스와 객체의 생성

(16)

단원 05 객체지향과 클래스

클래스의 메소드 구현

❖ 메소드 구현

수정자 반환형 메소드이름(매개변수) { 구현 }

메소드 use()

신용카드를 사용하는 메소드

메소드 payBill()

– 매월 또는 수시로 카드 비용을 지불하는 메소드

메소스 addPoint()

– 카드 사용실적에 따른 포인트 합산하는 메소드

16

Section 2 클래스와 객체의 생성

(17)

단원 05 객체지향과 클래스

메소드 지정자

❖ 메소드 지정자 또는 수정자

다양한 지정자를 위한 키워드

17

Section 2 클래스와 객체의 생성

(18)

단원 05 객체지향과 클래스

실습예제 5-2

❖ 신용카드를 추상화하 여 여러 필드와 메소 드로 구성된 클래스

18

Section 2 클래스와 객체의 생성

(19)

단원 05 객체지향과 클래스

클래스로부터 객체 생성

19

Section 2 클래스와 객체의 생성

❖ 클래스

객체를 만드는 모형

❖ 객체

클래스로부터 만들어짐.

new 이후에

CreditCard()와 같이 클 래스의 생성자

(constructor)를 호출하 여 객체를 생성

(20)

단원 05 객체지향과 클래스

객체의 필드와 메소드 참조

❖ 참조 연산자 .

참조 변수의 필드와 메소드를 사용

20

Section 2 클래스와 객체의 생성

(21)

단원 05 객체지향과 클래스

필드 참조 메소드 getter와 setter 구현

❖ Setter 와 Getter

필드의 값을 저장하는 메소드 setter

필드의 값을 반환하는 메소드 getter

❖ 키워드 this

객체 자신을
 의미하는
 키워드

21

Section 2 클래스와 객체의 생성

(22)

단원 05 객체지향과 클래스

실습예제 5-4

❖ getter 와 setter를 구현한 클래스 CreditCard

22

Section 2 클래스와 객체의 생성

package obj.setter;

 

public class CreditCard {

public String owner; //카드 소유자 private long number; //16자리 카드번호 private int point; //카드 포인트

private int balance; //현재까지 사용액

//카드 사용 메소드

public void use(int amount) { balance += amount;

}

//카드 비용 지불 메소드

public void payBill(int amount) { balance -= amount;

addPoint(amount);

}

//카드 포인트 추가 메소드

private void addPoint(int amount) { point += amount/1000;

}  

//setter & getter

public long getNumber() {

return number;

}

public void setNumber(long number) { //this.number = number;

if (number < 1000_0000_0000_0000L) {

System.err.println("잘못된 카드 번호입니다.");

return;

}

this.number = number;

}

public int getPoint() { return point;

}

public void setPoint(int point) { this.point = point;

}

public int getBalance() { return balance;

}

public void setBalance(int balance) { this.balance = balance;

} }

(23)

단원 05 객체지향과 클래스

실습예제 5-5

❖ 클래스

CreditCard 의 객체 생성과

getter 와 setter 사용

23

Section 2 클래스와 객체의 생성

(24)

단원 05 객체지향과 클래스

이클립스 팁

❖ getter 와 setter의 생성

24

(25)

단원 05 객체지향과 클래스 25

3. 생성자

(26)

단원 05 객체지향과 클래스

생성자 구현(1)

❖ 생성자 개요

객체를 만드는 틀인 클래스에서 필요하면 생성자를 구현

객체가 생성될 때 필요한 작업을 수행하는 특별한 메소드

주로 객체 필드에 초기 값을 저장하거나 객체의 사용을 위해 필요한 초기화 작업이 수행

❖ 생성자의 구성

반환형을 기술하지 않으며 이름은 반드시 클래스 이름

생성자의 인자는 필요하면 기술

생성자는 주로 접근 지정자 public을 사용

만일 필요하다면 생성자의 접근 지정자도 private 또는 protected도 가능

26

Section 3 생성자 p164

(27)

단원 05 객체지향과 클래스

생성자 구현(2)

❖ 클래스 student의 생성자

27

Section 3 생성자

(28)

단원 05 객체지향과 클래스

객체 생성을 위한 생성자 호출

28

Section 3 생성자

(29)

단원 05 객체지향과 클래스

기본 생성자(1)

❖ 기본 생성자(default constructor)

인자가 없는 생성자

클래스 Student에서 생성자가 하나도 구현되지 않았다면

new Student()와 같이 인자가 없는 생성자를 호출하여 객체를 생성

생성자를 전혀 구현하지 않은 클래스는 자동으로 기본 생성자를 제공

29

Section 3 생성자

(30)

단원 05 객체지향과 클래스

기본 생성자(2)

❖ 클래스에서 인자가 있는 생성자가 적어도 하나 구현되었다면

더 이상 기본 생성자는 자동으로 사용 불가능

기본 생성자를 사용하려면 기본 생성자도 직접 구현해야 함

30

Section 3 생성자

(31)

단원 05 객체지향과 클래스

실습예제 5-7

❖ 학생을 위한 클래스의 생성자 구현 과 객체 생성

31

Section 3 생성자

(32)

단원 05 객체지향과 클래스

생성자 오버로딩

❖ 필요한 여러 생성자 구현

생성자 오버로딩(constructor overloading)

하나의 클래스에서 인자가 다르면 생성자를 여러 개 구현 가능

32

Section 3 생성자

(33)

단원 05 객체지향과 클래스

실습예제 5-8

❖ 클래스 CreditCard의 여러 생 성자 활용

33

Section 3 생성자

(34)

단원 05 객체지향과 클래스

자기 자신의 다른 생성자 호출

❖ this(…)

구현된 자기 자신의 다른 생성자를 호출하는 문장

생성자 구현에서 첫 줄에는

this(인자)로 다른 생성자를 호출하여 사용 가능

두 번째 줄부터는 사용 불가

34

Section 3 생성자

(35)

단원 05 객체지향과 클래스

실습예제 5-10

❖ 자동차를 표현한 클래스

35

Section 3 생성자

package obj.constructor;

 

public class Car {

private int maxSpeed; //최고 속도 public String brandName; //브랜드이름 public int speed; //현재 속도

 

//브랜드 이름을 지정하는 생성자

public Car(String brandName) { this.brandName = brandName;

}

//브랜드 이름과 최고 속도를 지정하는 생성자

public Car(String brandName, int maxSpeed) { this(brandName);

this.maxSpeed = maxSpeed;

}

//속도 관련 메소드

public int speedUp() { return speed += 30;

}

public int speedDown() { return speed -= 20;

}

//maxSpeed의 setter와 getter public int getMaxSpeed() {

return maxSpeed;

}

public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed;

}

public static void main(String[] args) { Car mycar = new Car("포르쉐", 300);

mycar.speedUp();

mycar.speedUp();

System.out.print("차종: " + mycar.brandName);

System.out.print(", 최고 속도: " + mycar.getMaxSpeed());

System.out.println(", 현재 속도: " + mycar.speedDown());

} }

(36)

단원 05 객체지향과 클래스 36

4. 정적인 속성을 위한 STATIC과 상

수를 위한 FINAL

(37)

단원 05 객체지향과 클래스

정적 필드와 메소드를 위한 키워드 static(1)

❖ 키워드 static

필드나 메소드의 소속을 클래스로 제한하는 키워드

static을 사용한 정적 변수나 정적 메소드는 클래스 변수와 클래스 메소드

정적 필드 PI

클래스에 소속된 저장공간이 하나만 존재하는 변수

할당되는 객체에는 저장공간이 없음

비정적 필드 radius

할당되는 객체마다 저장공간이 할당되는 객체 소속 변수

❖ 정적 필드 참조 방법

정적 필드는 Circle.PI와 같이 클래스이름.정적필드로 참조하는 방법이 원칙

c1.PI나 c2.PI와 같이 객체 이름으로도 참조 가능

37

Section 4 static과 final p174

(38)

단원 05 객체지향과 클래스

정적 필드와 메소드를 위한 키워드 static(2)

38

Section 4 static과 final

(39)

단원 05 객체지향과 클래스

실습예제 5-11

❖ 클래스 Circle에서 원주율 PI를 정적으로 선언하여 사용

39

Section 4 static과 final

(40)

단원 05 객체지향과 클래스

변수를 상수로 만드는 final

❖ 지역 변수의 상수

키워드 final을 명시

저장된 값을 더 이상 수정할 수 없도록

❖ 소속 변수인 필드를 상수로 선언하기 위해

키워드 final을 명시

static도 함께 사용하여 정적으로 하는 것을 권유

40

Section 4 static과 final

(41)

단원 05 객체지향과 클래스

실습예제 5-13

❖ 클래스 Circle에서 면적과 원의 둘레 길이 구하기

41

Section 4 static과 final

(42)

42

(43)

[ Add your company slogan ]

Thank You !

참조

관련 문서

File[] listFiles() : 해당 경로에 있는 파일의 목록을 File 배열로 리턴합니다.. String getName() : 해당 경로에 있는 파일이나

the association name, common when drawing a domain model, is often excluded (though still legal) when using class diagrams for a software.. perspective

즉 , 이벤트 처리용 리스너 클래스 작성시 리스너 인터페이스 를 이용한 것이 아니라, 어댑터 클래스를 이용함으로써 불필 요한 코드를 줄일 수

 관계된 개체 클래스들이 관계성을 통해 하나의 릴레이션 으로 합병.  개체 클래스 Employee와 Store가 Manages 관계성을 통해

• 애플리케이션의 여러 자원들과 메인 프레임 클래스, View 클래스, Document 클래스 등을 하나의 묶 음으로 가지는

 클래스는 필드와 메소드로

상속에 의한 클래스 인스턴스의

학습창은 강좌 제목이 표시되는 상단영역, 강의 목차가 표시 되는 좌측영역, 그리고 학습 콘텐츠가 보여지는 중앙 영역으