• 검색 결과가 없습니다.

6장 메소드

N/A
N/A
Protected

Academic year: 2022

Share "6장 메소드"

Copied!
31
0
0

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

전체 글

(1)

1

6장 메소드

이충기

명지대학교

컴퓨터공학과

(2)

들어가며

Q: 1인 기업 사장은 사업이 잘 되어 혼자서 모든 일을 더 이상 할 수 없게 되면 어떻게 하는가?

A:

(3)

3

메소드

 자바 프로그램은 클래스들의 모음이다.

 메소드는 클래스의 주요 구성 요소이다.

 메소드는 특정 작업을 수행하는 자바 문들의 모음이다.

 메소드는 작업 수행에 필요하다면 데이터를 넘겨 받아 작업을 수행한다.

 메소드를 이용하려면 메소드를 호출해야 한다.

(4)

메소드

주: 1. 데이터를 넘겨 받지 않을 수도 있다 2. 결과 값을 반환하지 않을 수도 있다

데이터 1 메소드

데이터 2 결과값

(5)

5

메소드 정의

public 반환유형 메소드이름(형식매개변수 목록) {

문 1;

문 2;

. . . 문 N;

}

주: 1. 결과 값을 반환하지 않는 메소드의 반환유형은 void이다.

2. 메소드가 데이터를 넘겨 받지 않는다면 형식 매개변수 목록은 빈 칸이 된다.

메소드 몸체

메소드 머리부

(6)

return 문

 메소드가 실행을 마친 후 결과 값을 반환할 때 사용하는 문이 return 문이다.

return <연산식>;

 <연산식>을 계산한 결과 값의 데이터 형은 메소드 머리부의 반환 유형과 일치해야 한다.

 결과 값을 반환하지 않는 메소드는 <연산식>이 없는 return문을 사용할 수 있다.

(7)

7

지역 변수

 메소드가 작업을 수행하면서 저장해야 할 데이터가 있다면 이 데이터를 저장하는 변수가 지역 변수이다.

 지역 변수는 메소드내에서 선언할 수 있다.

 메소드의 형식 매개변수들은 메소드가 호출될 때 자동적으 로 생성되므로 지역 변수들이다.

 메소드 실행이 끝나면 모든 지역 변수들(형식 매개변수들

포함)은 없어진다.

(8)

메소드 작성

 한 메소드가 특정 작업을 어떻게 수행하는지는 보통 알고리즘 에 의해 기술된다.

 알고리즘은 특정 문제를 풀기 위한 과정을 단계별로 기술한 것이다.

 알고리즘은 보통 의사코드나 순서도를 사용하여 기술한다.

 의사코드는 한글 문장들과 자바 문들을 혼합한 코드이다.

 순서도는 어떤 문제를 해결하는 데 필요한 논리적인 단계들을 그 림으로 표시한다.

(9)

9

예: 메소드 작성

 두 정수들을 입력 받아 그 중 작은 정수를 찾는 메소드를 작성해 보자.

 메소드 머리부 작성

- 메소드 이름을 정한다: findMin

- 입력 받는 두 정수들을 나타내는 형식매개변수들의 이름들을 정해야 한다.

number1, number2

- 메소드가 반환하는 최솟값은 정수이므로 반환형은 int 이어야 한다.

(10)

예: 메소드 머리부 작성

int findMin(int number1, int number2)

반환유형

메소드이름 형식매개변수 목록

주: 형식매개변수 목록은 각 매개변수의 데이터 유형과 이름을 기술한다

(11)

11

메소드 알고리즘

최솟값을 저장하는 변수 minimum을 선언한다

minimum을 반환한다

number1 < number2?

minimum = number1 minimum = number2 아니요

시작

(12)

예: 메소드 몸체 작성

 메소드 몸체는 여는 중괄호({)로 시작하고 닫는 중괄호(})로 끝난다.

{

int minimum;

if (number1 < number2) minimum = number1;

else

minimum = number2;

return minimum;

}

주: return 문의 연산식의 결과 값의 데이터 형은 메소드의 반환유형과 같아

(13)

13

메소드 호출

 메소드를 이용하려면 호출해야 한다.

 메소드가 호출이 될 때, 프로그램의 실행은 호출된 메소드 몸체의 첫 문에서 시작된다.

 메소드 몸체의 실행을 마친 후에 프로그램의 실행

은 메소드를 호출한 문으로 돌아가서 계속된다.

(14)

메소드 제어 흐름

 호출된 메소드가 같은 클래스내에 있는 경우에는 호출시 메소드 이름만 필요하다.

myMethod();

myMethod

main

(15)

15

메소드 호출 방법

1. 메소드이름( )

2. 메소드이름(실제 매개변수 목록)

 첫 번째 호출 유형은 매개변수가 없는 메소드를 호출한다.

 두 번째 호출 유형은 매개변수(들)을 가진 메소드를 호출한다.

 메소드가 호출될 때마다 호출문에 있는 실제 매개변수(들)은 형 식 매개변수(들)에 복사된다.

(16)

예: 메소드 호출

minvalue = findMin(value1, value2);

int findMin(int number1, int number2) { int minimum;

if (number1 < number2) minimum = number1;

else

minimum = number2;

return minimum;

(17)

17

메소드 분할

 메소드는 한 개체로 쉽게 이해될 수 있도록 상대적으로 짧아야 한다.

 긴 메소드는 명료하게 필요한 만큼 여러 개의 더 작은 메소드들로 분할되어야 한다.

(18)

재귀 메소드

 특정 작업을 수행하기 위해 메소드는 보통 다른 메소드를 호출한다.

 재귀 메소드(recursive method)는 몸체 내에서 자기 자신을 호출한다.

(19)

19

재귀

 재귀(recursion)는 어떤 것을 자기 자신에 의해 정의하는 프로세스이다.

 예 1: 선물 상자는 선물이다.

혹은 선물 상자는 선물과 선물 상자이다.

 예 2: 숫자 목록은 숫자이다.

혹은 숫자 목록은 숫자, 숫자 목록이다.

58

38, 93, 28, 49

(20)

재귀 메소드 작성

 1부터 N(≥ 1)까지의 합을 구하는 메소드를 작성하라.

 sum(N) = 1 + 2 + . . . + N 의 재귀 정의

- sum(1) = 1

- sum(N) = sum(N - 1) + N, N ≥ 2

 재귀 메소드 머리부 작성

- 메소드 이름: findSum

- 형식 매개변수: N – 넘겨 받는 정수

(21)

21

재귀 메소드 설계

가정: 입력받은 정수 N은 0보다 큰 정수이다 변수 sum: 1부터 N까지의 정수들의 합

알고리즘

1. 넘겨 받은 정수 N이 1이라면 합은 1이다. N이 1이 아니라면 합은 1부터 (N – 1)까지의 합에 N을 더한 값이다.

주: 1부터 (N – 1)까지의 합은 자기 자신의 메소드를 (N -1)

의 값을 가지고 다시 호출하여 구할 수 있다.

(22)

완성된 재귀 메소드

// 1부터 N(≥ 1)까지의 모든 정수들의 합을 구한다

int findSum(int N) { int sum;

if (N == 1) sum = 1;

else

sum = findSum(N - 1) + N;

return sum;

}

(23)

23

예제 프로그램

 문제: 양의 정수 내에 있는 홀수 숫자들의 개수를 구하는 메소드를 작성하라.

 반복을 이용하는 메소드 설계

매개 변수: N – 넘겨 받는 양의 정수 반환 값: 홀수 숫자들의 개수

지역 변수

- result: 홀수 숫자들의 개수

(24)

알고리즘

N > 0?

시작 result = 0

result = result + N % 2

result를 반환한다 아니요

N = N / 10

(25)

25

완성 메소드

// 양의 정수 내에 있는 홀수 숫자들의 개수를 구한다 public static int findNoOddNumbers1(int N)

{ int result = 0;

while (N > 0) {

result = result + N % 2;

N = N / 10;

}return result;

}

(26)

재귀 메소드 설계

매개 변수: N – 넘겨 받는 양의 정수 반환 값: 홀수 숫자들의 개수

의사코드 알고리즘

1.

N이 한 자리 숫자인 경우

N 내의 홀수 숫자들의 개수는 N을 2로 나눈 나머지이다.

2.

N이 두 자리 이상의 숫자인 경우

N 내의 홀수 숫자들의 개수는 N(혹은 N의 마지막 숫자)을 2로 나눈 나머지에 N의 마지막 숫자를 제거한 뒤 남은 숫자 내에 있는 홀수 숫자들의 개수를 더한 값이다.

(27)

27

재귀 메소드 순서도

N < 10?

시작

아니요

(findNoOddNumbers2(N / 10) + N % 2)를 반환한다

N%2를 반환한다

(28)

완성된 재귀 메소드

// 양의 정수 내에 있는 홀수 숫자들의 개수를 구한다 public static int findNoOddNumbers2(int N)

{

if (N < 10) return N % 2;

else return findNoOddNumbers2(N / 10) + N % 2;

}

(29)

29

메소드 작성 - 오류가 있는 예제

public char letterGrade (int Grade) { if (Grade >= 0 && Grade <=100) {

if (Grade >= 90) return (“A”);

if (Grade >= 80 || Grade < 90) return (“B”);

if (Grade >= 70 || Grade < 80) return (“C”);

if (Grade >= 60 || Grade < 70) return (“D”);

if (Grade <= 60) return (“F”);

} }

무엇이 잘못되었는가?

(30)

메소드 작성 – 고친 예제

public char letterGrade (int Grade) { char ReturnValue = ‘I’;

if (Grade >= 0 && Grade <=100) { if (Grade >= 90)

ReturnValue = ‘A’;

else if (Grade >= 80 && Grade < 90) ReturnValue = ‘B’;

else if (Grade >= 70 && Grade < 80) ReturnValue = ‘C’;

else if (Grade >= 60 && Grade < 70) ReturnValue = ‘D’;

elseReturnValue = ‘F’;

}

맞았는가?

(31)

31

요약

 메소드

 메소드 정의

 메소드 작성

 메소드 호출

 재귀 메소드

 예제 프로그램 작성

참조

관련 문서

나는 자식들을 내 가문에 어울리게 양육하고 많은 친구를 사귀게 하고, 그들에게 동등한 지위를 가지게 하려는 것이오.. 그들이 장차 태어날

고도르초프에 이어서 프랑수와 보르드에 의해서 유물에 대한 형식분류가 편년을 세우기 위한 수단이 아니라 유물 자 체에 대해서 연구하는 것으로

그래서 고고학은 단지 과거 선사시대 사람들의 생활양식을 복원하 는 것이 아니라 민족지 자료의 중요성을 이해하며 해석해야

비슷한 형식 전하 분포를 갖는 루이스 구조식 중에서 가장 합당한 구조는 전기음성도가 더 큰 원자가 음의 형식

– 이벤트가 발생하면, 등록되어 있던 이벤트 리스너의 메소드가 실행된다... 사용자가 버튼을 누르면,

관계

특히 말초 신경 손상으로 인해 신경자극 전달 저하되어 감각 둔해짐...  주로 인슐린 분비가 가능한

⚫ Inventor 임베디드를 통해, Inventor Data 혹 은 DXF 가져온 파일 최적화. ⚫ 멀티 시트 기능을 통해, 판금 제품 자동 배 치