java/객체지향

[객체지향] 메서드

2021. 7. 8. 16:01
목차
  1. ●메서드란?
  2. ●메서드의 선언부
  3. ●메서드의 구현부
  4. ●메서드의 호출
  5. ●메서드의 실행 흐름

●메서드란?

 '메서드(method)'는 특정 작업을 수행하는 일련의 문장을 하나로 묶은 것이다. 수학의 함수와 유사하며 어떤 값을 입력하면 어떤 작업을 수행하여 결과를 반환한다. 메서드는 그저 값을 넣고 원하는 결과만 얻으면 될 뿐, 메서드가 내부적으로 어떤 과정을 거치는 지 알 필요가 없다. 그저 메서드의 입력 값과 출력 값을 알기만 하면 된다. 그래서 메서드를 내부가 보이지 않는 '블랙박스(black box)'라고도 한다. 메서드는 '선언부(header)'와 '구현부(body)'로 이루어져있다. 메서드를 정의한다는 것은 선언부와 구현부를 작성한다는 뜻이며 형식은 아래와 같다 

●메서드의 선언부

 

 

 

 메서드의 선언부는 '메서드의 이름', '매개변수 선언', '반환타입'으로 구성되어있다. 메서드의 선언부는 후에 변경이 발생하지 않도록 신중히 작성해야 한다. 메서드의 선언부가 변경되면, 그 메서드가 호출되는 모든 곳이 변경되어야 하기 때문이다.

 

 

매개변수 선언(parameter declaration)

  매개변수는 메서드가 작업을 수행하는데에 필요한 값을 받는 것이다. 필요한 값의 갯수만큼 변수를 선언하며 변수간에는 쉼표','를 사용한다. 매개변수에서 한 가지 주의 해야 할 점은 두 변수의 타입이 같아도 변수의 타입을 생략할 수 없다는 것이다. 만일 값을 입력하지 않고 싶다면 괄호() 안에 아무것도 적지 않는다.

 

int add(int x, int y) {...}    // OK
int add(int x,y) {...}   //에러. 매개변수 y의 타입이 없다.

 

 

반환타입(return type)

 

 메서드의 작업수행 결과(출력)인 '반환값(return value)'의 타입을 적는다. 단, 반환값이 없는 경우 반환 타입으로 'void'를 적는다. 참고로 반환타입으로 'void'가 선언된다면 메서드 구현부에 'return'을 적지 않는다.

 

void print99danAll() {
 for(int i=1;i<=9;i++) {
  for(int j=2;j<=9;j++) {
    System.out.print(j+"*"+i+"="+(j*i)+" ");
  }
  System.out.prinln();
  }
 }

 위의 코드는 구구단 전체를 출력하는데, 작업을 수행하는데 필요한 값(입력)도, 작업수행의 결과인 반환값(출력)도 없다. 그래서 반환타입이 'void'다.

 

●메서드의 구현부

 메서드의 선언부 다음에 오는 괄호{}를 '메서드의 구현부'라고 한다. 여기에 메서드를 호출 했을 때 수행될 문장들을 넣는다.

 

return문

 

 메서의 반환타입이 'void'가 아닌 경우 메서드의 구현부에서는 무조건 'return 반환값;'이 포함되어 있어야 한다. 구현부가 수행되면 반환값은 호출한 메서드로 전달되는데 이 값은 반환타입과 일치하거나 적어도 형변환이 가능한 것이어야 한다. 또한 메서드의 매개변수는 여러 개일 수 있지만, 출력(반환값)의 갯수는 최대 하나만 허용된다.

 

 

 위 코드의 반환값(result)는 int값이다. add메서드의 반환타입 'int'와 일치한다.

 

지역변수

 

 각기 다른 메서드 안에 선언된 변수들은 서로 이름이 같더라도 선언이 가능하다. 이처럼 메서드 안에 선언된 변수를 '지역변수'라 한다.

 

int add(int x, int y) {
    int result = x + y;
    return result;
}

int multiply(int x, int y) {
    int result = x * y;
    return result;
}

 

 위 코드는 add 메서드와 multiply 메서드를 보여준다. 그런데 메서드 안의 변수들은 공통적으로 'x', 'y', 'result'를 갖는다. 변수들의 이름은 같지만 각기 다른 메서드에 선언된 지역변수들이기 때문에 컴파일 오류가 나지 않는다.

 

●메서드의 호출

 메서드를 정의만 하고 호출하지 않으면 소용이 없다. 메서드를 정의했다면 꼭 메서드를 호출 해야한다. 메서드를 호출하는 방법은 아래와 같다.

 

메서드이름(값1, 값2, ...);   // 메서드를 호출하는 방법

print99danAll();    // void print99danAll()을 호출
int result = add(3, 5).   //int add(int x, int y)를 호출하고, 결과를 result에 저장

 

 

인수(argument)와 매개변수(parameter)

 

  메서드를 호출 할 때 괄호 안에 지정해준 값들을 '인수(argument)'라 하는데 인자의 개수와 순서는 호출된 메서드의 선언된 '매개변수(parameter)'와 일치해야 한다. 또한 인수는 메서드가 호출되면서 매개변수에 대입되므로, 인자 타입은 매개변수의

타입과 일치하거나 자동 형변환 가능한 것이어야 한다.

 

 만약 메서드에 선언된 매개변수의 개수보다 많은 값을 괄호()에 넣거나 타입이 다른 값을 넣으면 컴파일 에러가 발생한다

int result = add(1, 2, 3);   // 에러, 메서드에 선언된 매개변수의 개수가 다름
int result = add(1.0, 2.0);  // 에러, 메서드에 선언된 매개변수의 타입이 다름

 

●메서드의 실행 흐름

 

class MyMath {
     long add(long a, long b) {
          long result = a + b;
          return result;
      }
      long subtract(long a, long b) { return a - b; }
      long multiply(long a, long b) { return a * b; }
      double divide(double a, double b) { return a / b; }
}

 MyMath 클래스의 add메서드를 호출하는 과정을 통해를 통해 메서드의 실행흐름을 살펴보도록 하겠다.

 

 

 MyMath클래스의 'add(long a, long b)'를 호출하기 위해서는 우선 MyMath클래스의 인스턴스 'MyMath mm = new MyMath();'를 생성한 다음 참조변수 mm을 통해 실행을 진행한다. 이후 add메서드를 호출하고 인수 1L와 2L은 메서드 add의 매개변수 a, b 에 각각 대입된다. 이후 add메서드의 구현부가 수행되고 수행이 끝나면 호출한 메서드로 돌아와 문장을 실행한다.

 

출처:자바의 정석 기초편( 저자: 남궁성, 출판사: 도우출판)

 

'java > 객체지향' 카테고리의 다른 글

[객체지향] static 메서드와 인스턴스 메서드  (0) 2021.07.09
[객체지향] return문과 반환값  (0) 2021.07.09
[객체지향] 변수  (0) 2021.07.06
[객체지향] 객체  (0) 2021.07.05
[객체지향]객체지향 언어, 클래스와 객체  (0) 2021.07.05
  1. ●메서드란?
  2. ●메서드의 선언부
  3. ●메서드의 구현부
  4. ●메서드의 호출
  5. ●메서드의 실행 흐름
'java/객체지향' 카테고리의 다른 글
  • [객체지향] static 메서드와 인스턴스 메서드
  • [객체지향] return문과 반환값
  • [객체지향] 변수
  • [객체지향] 객체
각시탈코더
각시탈코더
각시탈코더
각시탈코더
각시탈코더
전체
오늘
어제
  • 분류 전체보기 (203)
    • java (46)
      • 객체지향 (20)
      • 기본문법 (8)
      • 자바의 정석 연습문제 오답노트 (9)
      • 백준 알고리즘 (9)
    • Spring (17)
      • SpringMVC (8)
      • Spring DI와 AOP (5)
      • REST API와 Ajax (1)
      • Spring 프로젝트 (1)
      • Spring Security (0)
    • DB (47)
      • Oracle (15)
      • SQL오답노트 (25)
      • 튜닝 (0)
      • ERD (1)
      • DB 모델링 (5)
    • Servlet & JSP (3)
    • JDBC (2)
      • 기본 (1)
      • 스프링JDBC (1)
    • MyBatis (2)
    • JavaScript (2)
      • 코딩애플 (0)
      • 문법 (1)
    • React (0)
      • 코딩애플 (0)
    • HTML (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • CSS (0)
      • 모던 웹을 위한 HTML5+CSS3 바이블 (0)
    • Linux (0)
    • Git & GitHub (2)
      • Git (1)
    • CS (19)
      • 네트워크 (6)
      • HTTP (7)
      • 컴퓨터구조 (0)
      • 자료구조와 알고리즘 (2)
      • 기타 (4)
    • 개발설정 (2)
    • 기술면접 (0)
      • JAVA (0)
      • Spring (0)
      • DB (0)
      • 네트워크 (0)
      • 공통 (0)
    • 프로젝트 (2)
      • 게시판만들기 (2)
    • 기혁씨의 삽질표류기 (28)
    • 참고자료 (2)
      • 국비수업 (0)
      • 당당 프로젝트 (1)
    • 뉴렉처 (17)
      • 자바 (11)
      • 자바스크립트 (3)
      • 키워드 (0)
      • 숙제 (0)
      • CSS (0)
      • DB (3)
      • 서블릿 (0)
      • 스프링 (0)
      • DOM (0)
    • 내가 만든 학습그림 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오류
  • 객체지향
  • 자바의정석기초편
  • 오라클
  • 자바
  • 뉴렉처
  • 웹프로그래밍
  • 배열
  • 코딩
  • 네트워크
  • db
  • 알고리즘
  • SQL
  • It
  • 백준
  • 국비수업
  • 연습문제
  • Java
  • Oracle
  • 개발자
  • 프로그래머스
  • 공부
  • 모두의네트워크
  • 쿼리
  • spring
  • 자바의정석
  • 스프링
  • 백엔드
  • 에러
  • 서브쿼리

최근 댓글

최근 글

hELLO · Designed By 정상우.
각시탈코더
[객체지향] 메서드
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.