티스토리 뷰

728x90
반응형

이번에는 여러 method의 형태와 활용법을 살펴볼 예정이다.

바로 예제를 통해 살펴보자!

 

1-1) DarkTemplar.java - 4번째 에시에서 확인할 수 있다! 

https://live-for-myself.tistory.com/81

 

[Java] Class #2 - static

저번 게시물에서 클래스의 용도에는 3가지가 있으며 그 중 두가지를 살펴보았다. 데이터 타입의 역할과 객체의 설계도 역할이 그 두가지인데, 아래 글에서 확인할 수 있다! https://live-for-myself.tist

live-for-myself.tistory.com

 

1-2) MyObject.java - 각종 메소드를 담고있는 MyObject 클래스 

package test.mypac;

public class MyObject {
	/*
	 * public => 이 메소드는 어디에서든지 접근 가능하다.
	 * void => 이 메소드는 어떤 값도 리턴하지 않는다.
	 * walk => 메소드명
	 * ( ) => 이 메소드는 어떤 값도 전달받지 않는 메소드이다.
	 */
	
	public void walk() {
		System.out.println("걸음을 걸어요!");
	}
	
	//int type을 리턴해주는 메소드
	public int getNumber() {
		int myNum = 10;
		return myNum;
	}
	
	//String type을 리턴해주는 메소드
	public String getGreeting() {
		return "안녕하세영~";
		
	}
	
	public DarkTemplar getTemplar() {
		return new DarkTemplar();
	}
	
	public void setNum(int num) {
		System.out.println("인자로 전달받은 num: "+num);
	}
	
	public void setName(String name) {
		System.out.println("인자로 전달받은 name: "+name);
	}
	
	public void setTemplar(DarkTemplar templar) {
		System.out.println("setTemplar() 메소드가 호출되었습니다.");
	}
	
	public void setInfo(String target,DarkTemplar tem) {
		System.out.println("setInfo() 메소드가 호출됨");
	}
	public void useSome(Radio r, Speaker s) {
		System.out.println("useSome() 메소드가 호출됨");
	}
}

1-3) MainClass01.java - Myobject 객체를 생성하고 그 객체의 각종 메소드 활용하기

package test.main;

import test.mypac.DarkTemplar;
import test.mypac.MyObject;

public class MainClass01 {
	public static void main(String[] args) {
		MyObject obj = new MyObject();
		obj.walk();
		//메소드가 리턴해주는 값을 지역변수에 담아보기
		int num = obj.getNumber();
		String greet = obj.getGreeting();
		DarkTemplar templer = obj.getTemplar();
		
		obj.setNum(num);
		obj.setName("김구라");
		System.out.println("main 메소드가 종료 됩니다.");
		
		
	}

}

출력값

여러 메소드를 호출해보았기 때문에 설명이 복잡해질 수 있어 간략하게 표현해보았다. 하나하나 읽어보면 이해하기 어렵지 않을 것이다.

 

1) Myobject 객체를 생성하고 obj에 참조값 담기

2) obj.walk() 메소드 호출하기 => "걸음을 걸어요!" 출력

3) getNumber() 메소드는 반환값이 int 형이므로 int 변수인 num 변수에 담기 

4) getGreeting() 메소드는 반환값이 String 형이므로 String 변수인 greet에 담기

5) getTemplar() 메소드는 반환값이 DarkTemplar 형태이므로 DarTemplar 변수인 templar에 담기

( ctrl+space bar 로 import 필수!)

6) int형을 매개변수로 갖는 setTum 메소드에 num을 인자로 전달하기 => 메소드 호출되어 "인자로 전달받은 num: 10" 출력

7) String형을 매개변수로 갖는 setName 메소드에 "김구라"를 인자로 전달하기 => 메소드 호출되어 "인자로 전달받은 name: 김구라" 출력


1-4) MainClass02.java - MyObject 객체 생성하여 변수 obj에 담고, obj 객체의 메소드 호출해보기 

 

우선, 객체를 생성하여 담는 코드는 다음과 같다.

MyOjbect obj = new MyObject();

 

obj의 setTemplar()를 호출해보자.

setTemplar()메소드는 인자로 DarkTemplar 타입을 받는다.

따라서, DarkTemplar 객체를 생성하여 인자로 넣어주어야 한다.

코드는 아래와 같다.

obj.setTemplar(new DarkTemplar());

 

전체코드

package test.main;

import test.mypac.DarkTemplar;
import test.mypac.MyObject;

public class MainClass02 {
	public static void main(String[] args) {
		MyObject obj = new MyObject();
		//obj 객체의 .setTemplar() 메소드를 호출해보세요.
		obj.setTemplar(new DarkTemplar());
		
	}

}

1-5) MainClass03.java - MyObject 객체를 생성하여 obj1 변수에 담고 setInfo()와 useSome() 메소드 호출해보기

 

우선, MyObject 객체를 생성하고 obj1 변수에 담는 것은 위와 동일하다. 

코드는 다음과 같다.

MyObject obj1 = new MyObject;

그러면 setInfo를 살펴보자.

setInfoString형의 target과 DarkTemplar형의 tem을 인자로 갖는다.

따라서, 두번째 인자에 DarkTemplar 객체를 생성하여 인자로 전달해야함을 알 수 있다.

코드는 다음과 같다.

obj1.setInfo("scv",new DarkTemplar());

 

이러한 방법 외에도 한가지 방법이 더 있다.

바로, DarkTemplar 객체를 먼저 생성하여 변수에 담은 뒤, 그 변수를 인자로 전달하는 방법이다.

DarkTemplar t1 = new DarkTemplar();
obj1.setInfo("scv", t1);

 

다음으로, useSome()을 호출해보자.

useSome() 메소드는 Radio와 Speaker 형태를 인자로 갖는다. 

따라서, Radio 객체와 Speaker 객체를 생성하여 인자로 전달해야 한다.

obj1.useSome(new Radio(), new Speaker());

Radio와 Speaker 클래스의 모양은 다음과 같다. 클래스는 메소드와 필드를 필수로 가질 필요가 없음을 확인할 수 있다.

package test.mypac;

public class Radio {

}
package test.mypac;

public class Speaker {

}

 

 

전체 코드

package test.main;

import test.mypac.DarkTemplar;
import test.mypac.MyObject;
import test.mypac.Radio;
import test.mypac.Speaker;

public class MainClass03 {
	public static void main(String[] args) {
		MyObject obj1 = new MyObject();
		//방법1
		DarkTemplar t1 = new DarkTemplar();
		obj1.setInfo("scv", t1);
		//방법2
		obj1.setInfo("scv",new DarkTemplar());
		
        obj1.useSome(new Radio(), new Speaker());
	}
	
	
}

 

 

실행 결과

 


2) Messenger.java - sendMessage() 메소드가 오버로딩 되어 있는 클래스 

package test.mypac;
/*
 * 메소드는 다중 정의(오버로딩) 되어 있는 경우도 있다.
 */
public class Messenger {
	public void sendMessage() {
		System.out.println("빈 메시지를 전송합니다.");
	}
	
	public void sendMessage(String msg) {	
		System.out.println(msg+" 를 전송합니다.");
	}
	
	public void sendMessage(int num) {
		System.out.println("숫자 "+num+" 를 전송합니다.");
		
	}

}

 


2-1) MainClass04.java - 오버로딩(다중정의)된 메소드 사용해보기 

 

Messenger 클래스에는 이름이 같고, 인자가 다른 3가지 형태의 메소드가 있다.

Messenger 객체를 생성하고, 이 3가지 형태의 메소드를 모두 사용해보자.

package test.main;

import test.mypac.Messenger;
import test.mypac.MyObject;
import test.mypac.Radio;
import test.mypac.Speaker;

public class MainClass04 {
	public static void main(String[] args) {
		
		//다중 정의된 메소드 사용해보기
		Messenger m = new Messenger();
		m.sendMessage();
		m.sendMessage("hi");
		m.sendMessage(999);
	}

}

 

실행 결과 

인자를 넘겨주면, 일치하는 형태의 인자를 가진 메소드가 알아서 호출되는 모습을 확인할 수 있다.


3) Gun.java - 자기 자신을 return하는 fire 메소드를 가지는 Gun 클래스 

package test.mypac;

public class Gun {
	public Gun fire() {
		System.out.println("빵~");
		return this;
	}
}

 

우선 fire() 메소드의 반환 타입은 Gun이다. 

return this 해주는데, 여기서 this는 해당 메소드가 속한 객체, 즉 Gun이다.

즉, 자기 자신인 Gun을 리턴하는 메소드이다.

 

이 Gun 메소드를 활용해보자.


우선 Gun객체를 생성하고 변수 g에 담고 fire() 메소드를 호출해보자.

Gun g = new Gun();
g.fire();

 

실행결과는 "빵~"이다.

 

메소드를 3번 실행하고 싶다면 다음과 같이 작성할 수 있다.

Gun g = new Gun();
g.fire();
g.fire();
g.fire();

 

더 좋은 방법은 없을까?

Gun.fire()을 하면, 자기 자신을 리턴하므로, 다시 fire()메소드를 사용할 수 있다.

즉, 다음과 같은 코드가 가능하다.

new Gun().fire().fire();

 

이렇게 되면, fire()을 두번 호출하는 것이므로, 3번 호출하고 싶다면, 뒤에 .fire()을 또 해주면 된다.

원하는 횟수만큼 무한대로 호출이 가능하다. 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함