-
[java] 메소드java 2023. 1. 16. 17:51
메소드 - 클래스 내의 함수이다. 입력을 통해 결과물을 내놓는다. 여러번 반복할 일이 있을때 이를 수월하게 하기 위해 쓰인다.
메소드의 기본구조
리턴자료형 메소드명(입력자료형1 매개변수1, 입력자료형2 매개변수2, ...){ return 리턴값; }
class Sample{ int sum(int a, int b) { //sum메소드의 리턴자료형은 int이다. return a+b; // return은 메소드의 결과값을 돌려주는 명령어이다. } } public class HelloWorld { public static void main(String[] args) { int a = 3; int b = 4; Sample sample = new Sample(); int c = sample.sum(a, b); //sum메소드의 리턴자료형이 int이므로 result의 자료형은 int여야한다. System.out.println(c); } }
매개변수(parameter)와 인수(arguments)
매개변수 parameter 는 a, b이고
인수 arguments 는 3,4이다.
메소드의 종류
1. 일반적인 메소드 : 입력값 리턴값이 모두 있음.
2. 입력값이 없는 메소드 :
public class Sample{ String say() { return "HI"; } public static void main(String[] args){ Sample sample = new Sample(); String a = sample.say(); System.out.println(a); } }
3. 리턴값이 없는 메소드 : 리턴 자료형을 void로 해주어야한다.
4. 입력값 리턴값 둘다 없는 메소드 : 리턴 자료형을 void로 하고, 2번 say()메소드처럼 작성해주면된다.
return의 또다른쓰임새
리턴 자료형이 void인 메소드에서, return문을 단독으로 사용하면 특정 조건에서 메소드를 즉시 빠져나갈 수 있다.
public class Sample { void sayNick(String nick) { if ("fool".equals(nick)) { return; } System.out.println("나의 별명은 " + nick); } public static void main(String[] args) { Sample sample = new Sample(); sample.sayNick("angel"); sample.sayNick("fool"); } }
메소드 내에서 선언된 변수의 효력 범위
메소드 안에서 사용하는 매개변수의 이름을 메소드 밖에서 똑같이 동일하게 사용한다면 어떻게 될까?
둘은 서로 관련이 없다. 메소드에서 사용한 매개변수는 메소드 안에서만 쓰여지는 변수이기 때문이다.
public class Sample { int varTest(int a){ a++; //return a; 를 추가한다면 출력되는 a값은 2가될것 } public static void main(String[] args) { int a =1; Sample sample = new Sample(); sample.varTest(a); //a를 증가시켰으나, return이없어 메소드내부에서 사용한 매개변수는 메소드 밖에서 효력이없음 System.out.println(a); // a = 1 } }
하지만 메소드에 입력값으로 객체가 들어온경우 메소드가 객체의 속성값을 변경한다면 이는 메소드 수행 후에도 객체는 변경된 속성값을 유지할 수 있다.
public class Sample { int a;// 객체변수 a void varTest(Sample sample){ sample.a++; } public static void main(String[] args) { Sample sample = new Sample(); sample.a = 1; //sample객체의 객체변수a는 1 sample.varTest(sample);// 객체가 넘어가서 객체내부 속성값이 변화 a 2 System.out.println(sample.a); //2출력 } }
위의 예시는 this를 활용하면 굳이 객체를 직접전달하는 수고를 하지 않아도된다.
public class Sample { int a;// 객체변수 a void varTest(){ this.a ++; } public static void main(String[] args) { Sample sample = new Sample(); sample.a =1; sample.varTest(); System.out.println(sample.a);//2출력 } }
'java' 카테고리의 다른 글
[java] 상속 (0) 2023.01.16 [java] call by value vs call by reference (0) 2023.01.16 [java] 클래스 (0) 2023.01.16 [java] 제어문(if,switch,while,for) (0) 2023.01.16 3장 연습문제 (0) 2023.01.15