• 검색 결과가 없습니다.

6. 클래스와 객체

N/A
N/A
Protected

Academic year: 2022

Share "6. 클래스와 객체"

Copied!
29
0
0

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

전체 글

(1)

6. 클래스와 객체

(2)

들어가며

Q: 축구 게임에서 먼저 공격하는 팀을 정하기 위해 동전을 던진다. 우리는 동전을 던질 때 앞면이 나오느냐 아니면 뒷면이 나오느냐에만 관심이 있다. 또한 동전을 가지고 해야 할 일은 동전을 던지는 것과 동전을 던진 후 결과를 알면 된다.

이 동전을 효과적으로 나타낼 수 있는 방법을 기술하라.

A:

(3)

클래스와 객체

• 객체(object): 우리 주변의 어떤 대상의 모델이다.

- 예: 학생, 예금계좌, 자동차, 고객

• 객체 = 데이터(data) + 연산(operation)

- 예: 예금계좌

- 데이터: 예금주, 계좌번호, 잔고

- 연산: 입금한다, 출금한다, 잔고 확인한다, 계좌이체한다

• 클래스(class)는 객체가 생성되는 틀, 원형 혹은 청사진이다. 객체는 클래스에 의해 정의된다.

• 객체는 클래스의 실례(instance)이다.

(4)

예: 클래스와 객체

질문: 클래스와 객체의 다른 예는?

(5)

예: 클래스와 객체

은행계좌

클래스 (개념)

갑돌의 은행계좌 잔고: 825,000

(실현) 객체

갑순의 은행계좌 잔고: 350,000 지우의 은행계좌

잔고: 70,000

같은 클래스로부터

여러 객체들

(6)

클래스와 객체

클래스: - 객체의 형태를 기술한다.

- 틀, 원형(template), 혹은 청사진 - 변수(데이터 표현), 연산, 그리고 상속

객체: - 클래스의 한 실례(instance) - 모든 객체 변수의 고유한 복사본을 가진다

이름 짓기 관례:

클래스: 이름내의 각 단어의 첫 자는 대문자로 시작 예: NeuralNetwork

객체: 이름내의 첫 단어의 첫 자는 소문자로 시작하고 다른 단어의

클래스와 그 클래스의 객체사이의 차이는

데이터 형과 그 형의 변수사이의 차이와 유사

핵심 개념

(7)

객체 지향 프로그래밍

(Object Oriented Programming)

• 구조 프로그래밍(structured

programming)의 강력한 대안이다.

• 구조 프로그래밍은 주어진 문제를 풀기 위해 데이터 구조들을 설계하고 그

구조들을 함수들(functions)로 처리한다.

• 기본 아이디어 : 모든 적절한 데이터와 그

데이터를 읽거나 수정하는 메소드들을

포함하는 클래스들을 설계한다.

(8)

객체 지향 프로그래밍이란?

1. 주어진 문제를 보고 필요한 객체들을 인식하고 이들을 클래스들로 모델한다 .

2. 필요한 클래스들의 일부가 이미 만들어져 있 다 면 그 클 래 스 들 을 부 품 과 같 이 사 용 한 다 . 나 머 지 클 래 스 들 은 새 로 작성한다.

3. 새로 작성하는 클래스들 사이에 유사성이 있다면 한 클래스를 또 다른 클래스에 기초하여 만든다.

4. 부품들을 조립하여 완성품을 만드는 것과

같 이 클 래 스 들 을 모 아 서 프 로 그 램 을

완성한다.

(9)

메시지와 메소드

• 객체지향 프로그램은 상호작용하는 객체들로 구성된다.

• 어떤 객체가 다른 객체에게 어떤 일을 수행하도록 명령하기 위해서 우리는 그 객체에 메시지를 보내야 한다. 이때

메시지는 메소드 호출에 해당한다.

• 한 객체가 메시지를 처리하기 위해서는

그것에 대응하는 메소드가 있어야 한다.

(10)

클래스

• 클래스는 데이터를 나타내는 변수 선언문(들)과 연산(들)을 나타내는 메소드 정의(들)을 포함한다.

int x, y;

char ch; 변수 선언문

메소드 정의

(11)

클래스의 구조

• 클래스는 머리부(header)와 몸체(body)로 이루어진다.

class 클래스이름 {

변수 선언문들 메소드 정의들 }

• 변수와 메소드는 각각 모델하는 객체의 데이터와 연산을 나타낸다.

• 변수는 객체 변수와 클래스 변수로 나누어진다.

(12)

메소드의 분류

• 메소드들은 크게 생성자 메소드(constructor), 변경자(modifier) 메소드와 접근자(accessor) 메소드로 나눌 수 있다.

• 생성자 메소드: 클래스로부터 객체를 만든다.

이때 객체 변수들의 값을 초기화할 수 있다.

• 변경자 메소드: (객체) 변수의 값을 변경한다.

• 접근자 메소드: (객체) 변수의 값을 되돌려

주거나 새로운 값을 계산하여 되돌려 준다.

(13)

가시성 수정자

• 가시성 수정자(visibility modifier)는 메소드나 변수들의 사용 범위를 명시하는 자바의

예약어이다.

• 세 개의 가시성 수정자: public, private, protected

• public 으로 선언된 클래스의 변수들과 메소드들은 어디서든지 이용될 수 있다.

• private로 선언된 클래스의 변수들과 메소드들은 그 클래스 내에서만 이용될 수 있다.

• protected 수정자는 9장에서 다루어진다.

(14)

클래스 작성

• 문제: 대학 내에 있는 한 은행의 계좌 관리 프로그램에서 은행계좌를

나타내야 한다.

• 은행계좌를 어떻게 모델할까?

- 은행계좌를 대표하는 속성은 무엇일까?

- 은행계좌에 적용 가능한 연산들은

무엇일까?

(15)

클래스 설계: 은행계좌

• 대표 속성

- 예금주 이름 - 잔고

• 연산

- 예금주 이름을 주어진 값으로 변경한다 - 잔고를 주어진 값으로 변경한다

- 예금주 이름을 알려 준다 - 잔고를 알려 준다

- 주어진 금액을 입금한다 - 주어진 금액을 출금한다

- 객체를 생성하면서 속성 데이터를 주어진 값들로

초기화한다

(16)

구현: 은행계좌 클래스

• 클래스의 이름: Account

• 클래스의 구조

class Account

{ // 변수 선언문(들) . . .

// 메소드 정의(들) . . .

}

(17)

class Account {

String ownerName;

int balance;

public void setOwnerName(String name) { ownerName = name;

}

public void setBalance(int amount) { balance = amount;

}

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

}

public void withdraw(int amount) {

예금계좌 클래스

객체 변수

변경자 메소드

계속

(18)

public String getOwnerName( ) { return (ownerName);

}

public int getBalance( ) { return (balance);

}

// 객체 변수들의 초기화를 수행하는 생성자 메소드 public Account( String name, int amount) {

setOwnerName(name);

setBalance(amount):

} }

예금계좌 클래스 (계속)

접근자 메소드

(19)

접근자와 변경자 메소드

접근자(accessor) 메소드:

“get” 메소드 . . .

( 메소드명은 보통 “get”으 로 시작)

객체의 데이터에 대한 값을 되돌려 준다

변수 값을 반환할 수 있다 계산되는 어떤 값을 반환할

변경자 (modifier) 메소드:

“set” 메소드 . . .

( 메소드명은 보통 “set”으로 시작)

객체의 변수 값을 바꾸는 메소드 변수들에 대한 접근을 제한하고 그에 따라 변수 값을 제어하도록 한다

(20)

생성자 메소드

동기 :

우리는 객체를 만들 때 새 객체의 변수들을 초기화하는 수단이 필 요하다.

수단: 생성자 메소드는 객체가 만들어 질 때 자동적으로 호출되며 new 연산자의 일부로서 객체의 초기 화가 메모리 할당과 같이 이루어 진다.

public Account (String name, int amount) {

setOwnerName (name);

setBalance (amount);

주: 이 메소드는 클래스 이름과 같은 이름을 가져야 한다.

그러면 우리는 다음과 같이 할 수 있다:

Account acct =

new Account (“홍길동”, 10000);

이는 다음과 같다:

Account acct = new Account();

acct.setOwnerName(“홍길동”);

acct.setBalance(10000);

(21)

생성자 메소드

절대안됨!

반환하는 값은 생성자 메소드가 아니라는 것을

생성자 메소드는 반환하는 값을 가지지 않는다:

다음과 같이 하지 말아라:

public int Account ( ) {

. . . // 임의의 코드 }

public void Account ( {

(22)

객체 사용하기

• 클래스의 한 보기인 객체를 만들어야 한다 .

• 이는 다음과 같은 세 과정을 포함한다:

1. 객체를 가리키는 참조 변수를 정의한다: Account acct;

2. 클래스의 객체를 만든다:

acct = new Account( );

위의 두 과정은 하나로 합칠 수 있다:

Account acct = new Account( );

3. 생성자 메소드를 통해 객체 변수들의 초기 값들을 줄 수 있다:

public Account (String name, int amount) { setOwnerName (name);

setBalance (amount);

}

생성자메소드를 적절히 사용하여 위의 세 과정을 한 번에 할 수 있다:

(23)

객체 사용하기

• 다음으로 만들어진 객체를 이용하여 원하는 일을 수행하기 위해서 객체의 적절한 메소드를 호출해야 한다.

• 객체 메소드 호출 방법

<객체를 가리키는 참조변수 명>.<객체 메소드 명> (실 매개변수 목록)

주: 객체 메소드가 매개변수를 가지고 있지 않다면 실 매개변수

(24)

예제: Account 객체 사용하기

• 문제: 한 예금계좌를 개설하여 입금과 출금을 하고 난 후 잔고를 출력한다.

• 설계

 변수: 예금계좌 객체 참조변수

 알고리즘

1. 예금주가 ‘홍길동’이고 초기 입금액이 10,000 원인 새 예금계좌를 만든다.

2. 이 계좌에 3,000원을 입금한다.

3. 이 계좌에서 5,000원을 출금한다.

(25)

Account 객체 사용하기

class Driver {

public static void main (String[ ] argv) { Account acct;

// 주어진 값들을 갖는 Account 객체를 만든다 acct = new Account(“홍길동”, 10000);

// 입금한다

acct.deposit(3000);

// 출금한다

acct.withdraw(5000);

// 잔고를 출력한다

두 번째 클래스가 Account 클래스의

한 보기인 객체를 만들기 위해 사용된다.

Driver 클래스는 main 메소드를 가지고 있고 한 프로그램으로서

실행된다.

(26)

예금계좌 객체 사용하기

class Driver {

public static void main (String[ ] argv) { Account acct;

// 주어진 값들을 갖는 Account 객체를 만든다 acct = new Account(“홍길동”, 10000);

// 입금한다

acct.deposit(3000);

// 출금한다

acct.withdraw(5000);

// 잔고를 출력한다

System.out.println(“현 잔고: ” + acct.getBalance());

먼저, acct 라는 변수를 선언한다.

이 시점에서, acct는 아무 것도 가리키지

않는다.

다음으로, acct가

가리키는 한 객체를 만든다.

(27)

프로그램 실행 방법

• 한 프로그램 내에 여러 개의 클래스들이 있고 각 클래스가 별도의 파일에 저장되어 있는 경우 우 리는 그 파일들을 같은 폴더에 저장한다.

• 이 경우 전체 프로그램을 실행하기 위한 과정은 다음과 같다:

1. 각 클래스를 컴파일한다.

2. main 메소드를 포함하고 있는 클래스를 실행

한다.

(28)

예제 프로그램 실행 방법

• 예제 프로그램을 구성하는

Account.java와 Driver.java는 같은 폴더에 별도의 파일로 저장되어 있다고 가정한다.

• 예제 프로그램을 명령 프롬프트에서 실행하는 과정:

1. javac Account.java

2. javac Driver.java

3. java Driver

(29)

요약

• 클래스와 객체 개념

• 객체 지향 프로그래밍

• 클래스 구조

• 클래스 작성하기

• 객체 사용하기

• 프로그램 실행 방법

참조

관련 문서

하지만 그것은 로버트 또한 그 무리의 자발적이고, 참여하며 영향을 끼친 구성원이며 아마도 다른 구 성원들이 그에게 영향을 준만큼 그 또한 그들에게 영향을

우리는 내 취향과 다르다는 이유로 다른 취향을 인정하지 않는 것 을 넘어서 그 취향을 잘못된 것이나 쓸모없는 것으로 간주하곤 한다.. 트로트에 대한 편견과 오해도

(A) 매우 빠른 어떤 소형 비행기들은 비행을 가능하게 하는 더 커다란 날개가 있 어야만 쉽게 이륙할 수 있고, 다른 어떤 비행기들은 상승 추진력을 증가시키기 위해서

1. 트라에서 지휘자가 작은 막대로 지휘를 하는 것은 연주자들이 정확하게 연주하도록 신호를 보내는 것입니다 엔트리 프로그래밍에서의 신호보내기는 어떤 오브젝트에서 신호를 보내면

하지만 현대의 과학자들은 그 전설이 사실일 경우 왜 그런 일을 했는지, 도대체 인신공양이 종을 만드는 데 어떤 도움이 되었는지 나름대로 근거를 제시하기도

최은영 충북대학교 아동복지학과 조교수 앞으로 한국사회가 사회서비스를 제도화하기 위해서 검토해야 할 주요 쟁점 중에서, 가족기능과 여성노동권에 대하여

따라서 해당도로에 대해 어떤 기종점간을 통행하는 차량들이 얼마만큼 이용하는지를 알기 위해서는 또 다른 분석이 필요하다. 이때 주로 이용되는

른 것들을 발생하도록 하는 것을 본다고 생각하지만, 가공하지 않은 감각 경험의 관점에서 우리는 단지 어떤 것들이 다른 것들보다 전에 발생하는 것을 보 고 이전에