• 검색 결과가 없습니다.

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)

요약

• 클래스와 객체 개념

• 객체 지향 프로그래밍

• 클래스 구조

• 클래스 작성하기

• 객체 사용하기

• 프로그램 실행 방법

참조

관련 문서

이 공정은 매일 하나의 뱃치만 작업할 수밖에 없으므로, 이상이 있는 경우 속히 조치를 취하지 않으면 막대한 경제적 피해를 본다.. 이를 관리하기 위해서

어떤 대상에 대한 유사성과 인접성을 다른 사물에 투영해 새로운

교육과정사회학은 절대적인 지식이라 여겼던 학교교육과정을 비판 적으로 검토하면서 어떤 집단에 의해, 어떤 기제를 통해 취사선택 되 는가를 밝히고자

어떤 별에서 스펙트럼 선이 관측되지 않았다고 해서 그 원소가 그 천체에 존재하지 않는다고 할 수 없다 별 대기에서의 온도와 압력이.

다른 자산에 비해 어떤 자산의 기대수익률이 상대적으로 높아지 면, 그 자산에 대한 수요량이 증가. 다른 자산에 비해 어떤 자산의 유동성이 상대적으로

다른 한편 어떤 것이 욕구나 이해 관심, 또는 때때로 평가자가 선호하는 경험을 만족시키는 수단으로 기능하기 때문에 가치 있을 뿐 아니라 그 자체를 위해서

구하도의 자연하천을 개보수하 여 충적단구를 관통하는 인공하 도 설치. 인공하도에는 둑을 설치한

따라서, 각 문제에서 어떤 방법으로 풀 이하는 것이 가장 편리한가를