자바 객체지향 - 메소드

자바 객체지향 - 메소드

작성자
태인태인
카테고리
📗 스터디
작성일
2020년 02월 23일
태그
Java

메소드가 하는 일

입력을 가지고 어떤 일을 수행한 다음 결과를 반환하는 것이다. 똑같은 작업이 반복해서 필요할 때, 메소드를 사용한다.
예시를 보자.
public int sum(int a, int b) { return a+b; }
sum이라는 메소드는 두개의 정수값을 더하는 메소드이다. 여기서 return은 결과 값을 반환하는 명령어이다.
public class Test { public int sum(int a, int b) { return a+b; } public static void main(String[] args) { int a = 3; int b = 4; Test myTest = new Test(); int c = myTest.sum(a, b); System.out.println(c); } }
3과 4라는 값을 더해 7이라는 값을 반환하는 것을 볼 수 있다.

입력값이 없는 메소드

public String say() { return "Hi"; }
이런 메소드는 입력값이 없다. 이런 경우 호출할 때 괄호 안에 아무것도 쓰지 않으면 된다.
myTest.say();

리턴값이 없는 메소드

public void sum(int a, int b) { System.out.println(a+"과 "+b+"의 합은 "+(a+b)+"입니다."); }
이 경우 반환(return)값이 없고, 메소드 자체에서 출력까지 한다.
이럴 때는 리턴타입 부분에 void라고 명시해야 한다
return;은 메소드를 빠져나갈 때에도 단독으로 써서 사용할 수 있다.
public void say_nick(String nick) { if ("fool".equals(nick)) { return; //메소드 빠져나가기 } System.out.println("나의 별명은 "+nick+" 입니다."); }
아래는 a값을 1씩 증가시키는 코드이다.
public int vartest(int a) { a++; return a; } public static void main(String[] args) { int a = 1; Test myTest = new Test(); a = myTest.vartest(a); System.out.println(a); }
여기서 return a로 main메소드의 a에 대입하지 않으면 결과는 2가 아닌 1로 출력될 것이다.
메소드의 내부(local)변수는 외부에 같은 이름의 변수가 있어도 영향을 받지 않는다.
 
아니면 이렇게 a를 맨 위에 선언한 후 public void를 사용해도 된다.
public class Test { int a; // 객체변수 a public void vartest(Test test) { test.a++; } public static void main(String[] args) { Test myTest = new Test(); myTest.a = 1; myTest.vartest(myTest); System.out.println(myTest.a); } }
 

메소드 오버로딩(Method Overloading)

public class Car { String color; String mission; String kind; int doorCount; int seat; Car() { } //다음 줄부터의 코드를 주시하자. Car(String color, int doorCount, String kind, String mission, int seat){ this.color = color; this.doorCount = doorCouont; this.kind = kind; this.mission = mission; this.seat = seat; } Car(String color) { this.color = color; } }
 
뭔가 이상한 점을 발견할 수 있다. 위에서 선언한 메소드들과 이름이 Car로 모두 같다.
Car(String color, int doorCount, String kind, String mission, int seat) { ... } Car(String color) { ... }
이것이 바로 메소드 오버로딩이다. 메소드 오버로딩은 인자값의 개수와 종류가 다른 경우 이름이 같을 수 있다는 것을 의미한다

댓글

guest