본문 바로가기

JAVA

[JAVA] 2. 다른 클래스에 있는 메소드 호출하기

프로젝트 - 패키지 - 클래스를 만들고 나서 곧바로 배운 건 독특하게도 클래스와 클래스 간의 상호작용이었다.

 

'아마 다른 내용보다 이걸 먼저 배운 이유는 실제 프로젝트가 실행될 때 모든 기능이 한 클래스에 작성되지 않고 클래스를 넘나들며 필요한 코드를 불러오기 때문이라 예상된다. 아님 말고' 

 

'개인적으로 공부하면서 가장 재밌는 점은 이게 비즈니스에서 어떻게 사용될까 하는 점이다. 어쨌든 우리가 코딩하는 이유는 무언가를 구현해 내려는데 있고 그 구현된 무언가를 실생활에서 활용하려는데 있다. 아직 코딩에 ㅋ자도 모르지만 적어도 내가 배우는 것들이 활용될 것이라는 점을 염두에 두고 공부하다 보면 끊임없이 흥미가 생기는 점이 있다. 이건 왜 이렇게 할까? 나중에 이건 어떻게 활용될까 ?하는... 암튼 갠적으로 공부를 재밌게 하는 방법이자 일종의 동기부여다'

 

각설하고 그래서 클래스와 클래스가 어떻게 상호작용하냐!

 

일단 두 가지 상황이 있다.

1. 클래스와 클래스가 한 패키지 안에 묶여있는 경우

2. 클래스와 클래스가 각각 다른 패키지 안에 있는 경우이다.

*클래스 간 상호작용 하는 방법은 여러가지가 있을 것으로 예상되나 일단 오늘 배운 것만 기록해보겠다!

 

 

그럼 곧바로 실습에 돌입해보겠다.

 

1. 클래스와 클래스가 한 패키지 안에 묶여있는 경우

먼저 클래스를 생성하면 두 가지를 볼 수 있다 패키지 경로와 클래스의 이름이다. 아래와 같다.

package com.br.first;

public class A_MethodPrinter {

}

나의 첫 클래스 명은 A_MethodPrinter.java 였다.

패키지와 퍼블릭 클래스 블라블라는 선언문이라고 하는데 아직 안배웠으니 그런갑다 하고 넘어가보겠다.

프로필과 같은 인포메이션 기능이 아닌가 싶다.

 

그 다음은 곧바로 일반 메소드를 입력하고 출력문을 작성해보았다. 개념을 배우지 않았는데 일단 냅다 진행되고 있다.

package com.br.first;

public class A_MethodPrinter {

	public void methodA() {

		System.out.println("메소드 A 출력문");
        
	}
    
}

 

출력문을 입력했으니 출력을 해보자! 아무튼 출력되겠지!

 

? 반응이 없다. 아무것도 안나온다. ?

출력문이 출력되려면 메인 메소드란게 있어야 한다고 한다. 위 public void 블라 블라는 일반 메소드라서 이 자체로는 실행이 안된다고 한다...?

 

자 그럼 뭔지 모르겠고 다음 단계를 밟겠다.

새로운 클래스를 생성하겠다...?

우선 first 패키지 안에 RunA 클래스를 추가로 만들어보았다.

package com.br.first;

public class RunA {

}

빠르게 넘어가보자

 

다음으로는 메인 메서드를 만들어보겠다.

package com.br.first;

public class RunA {

	public static void main(String[] args) {
		
	}
	
}

뭔진 몰라도 public static void main() {

} 의 형태로 메인 메소드를 만든다고 한다. 일반 메소드와의 차이는 static과 main이 빠진다는 것 뿐이다. 두가지를 놓치지 말자

package com.br.first;

public class RunA {

	public static void main(String[] args) {
		
		A_MethodPrinter a = new A_MethodPrinter();
		
	}
	
}

메인 메소드를 입력했다면 처음 만들었던 클래스 A_MethodPrinter 를 작업하고 있는 RunA 클래스에 생성해야한다.

방법은 위와 같다.

 

클래스 명을 입력하고 변수(안배웠지만)를 아무거나 선언한다(선언한다가 맞나?..)

나는 A_MethodPrinter(클래스명) a(변수) 로 정했다.

new는 클래스를 생성하는 코드다. 암튼 그렇다 new를 입력한 뒤에는 클래스명을 다시 한번 입력하고 뒤에 ();를 입력한다.

 

자 이제 다왔다.

package com.br.first;

public class RunA {

	public static void main(String[] args) {
		
		A_MethodPrinter a = new A_MethodPrinter();
		
		a.methodA();
		
	}
	
}

A_MethodPrinter 클래스를 RunA에 생성했으면 이제 그 안에 것을 호출할 차례다.

위에서 A_MethodPrinter를 변수 a로 선언했었다. 고로 a = A_MethodPrinter 인 셈이다.

 

A_MethodPrinter.methodA(); 는 위 A_MethodPrinter 클래스에서

public void 뒤에 methodA() {

} 로 입력했던 코드다.

 

.(dot)은 아무래도 경로의 의미가 있었으니까 A_MethodPrinter에서 methodA를 실행하라 뭐 그런 의미가 아닌가 싶다.

아무튼 이렇게 작성하고 실행시키면 아래와 같은 결과물이 나온다

 

아래 칸에 메소드 A 출력문 이라는 결과가 출력되었다.

두 가지의 클래스가 같은 패키지에 있는 경우를 실습해 보았다. 이제 겨우 하나 했다...

 

 

2. 클래스와 클래스가 각각 다른 패키지 안에 있는 경우

자 그러면 다른 패키지의 있는 경우로 넘어가보겠다. 

 

일단 패키지와 클래스가 각각 2개씩 필요하니 패키지, 클래스를 하나 더 만들어보겠다. (사실 이미 만들어두었다)

 

두번째 패키지의 클래스

package com.br.run;

public class RunC {

}

두번째 패키지 명은 run이고 클래스 명은 RunC 이다.

 

앞에서 출력문을 작성해 두었던 클래스를 생성하고 호출해보고자 한다. 일단 1번과 동일하게 코드를 작성한다.

package com.br.run;

public class RunC {

	public static void main(String[] args) {
	
		A_MethodPrinter a = new A_MethodPrinter();
		
		a.methodA();
		
	}
	
}

여기서 해야할 건 한가지다 한 줄의 코드만 입력하면 다른 패키지의 클래스를 생성 호출할 수 있다.

 

package com.br.run;

import com.br.first.A_MethodPrinter;

public class RunC {

	public static void main(String[] args) {
	
		A_MethodPrinter a = new A_MethodPrinter();
		
		a.methodA();
		
	}
	
}

바로 import 를 입력하는 것이다. import를 입력하고 com.br.first.의 경로를 입력하고 A_MethodPrinter 클래스의 이름을 입력하고 ; 으로 마무리 하면 다른 패키지의 클래스가 연결이 된다.

 

이 외에도 다른 방법도 있다.

package com.br.run;

import com.br.first.A_MethodPrinter;

public class RunA {

	public static void main(String[] args) {
		
		// 메인 메소드가 있기 때문에 프로그램 실행 가능
		// 실행하고자 하는 메소드 호출 가능
		// 메소드 호출 = 메소드명();
		// 다른 클래스에 있을 때는 실행할 메소드가 속해있는 클래스를 생성(new)
		// [표현법] 클래스명 사용할 이름 = new 클래스명();
		
		//A_MethodPrinter a = new A_MethodPrinter();
		// 같은 패키지가 아니기 때문에 빨간 줄이 나오는 것
		// 생성은 기본적으로 같은 패키지 안에서 찾음
		// 같은 패키지 내에 없다면 아래 해결방법을 통해 
		// 해결방법 1. 해당 클래스가 어떤 패키지에 속해 있는지 풀클래스명을 작성하는 방법
		//com.br.first.A_MethodPrinter a = new com.br.first.A_MethodPrinter();
		
		// 해결방법 2. 1번보다 보편적으로 사용하는 방법.
		// 클래스 명만을 가지고 생성하되 이 클래스가 어떤 패키지 것인지 상단에 선언
		A_MethodPrinter a = new A_MethodPrinter();
		
		// 생성 후 메소드 실행(호출)
		// [표현법] 사용할 이름.실행할메소드명();
		/*
		a.methodA();
		a.methodB();
		a.methodC();
		*/
		
		a.methodA();
		
		
	}
	
}

아직 선언문이나 메소드, 변수, 생성자 등 상세히 배우진 않았지만 클래스와 클래스를 상호 연결하여 활용하는 법을 배웠다. 실무에서 기초가 되고 끊임없이 사용해야하는 부분이기 때문에 앞으로 진행하는 코딩 작업은 하나의 클래스에서 바로 바로 끝내는 것이 아니라 다른 클래스를 통해 출력하는 연습을 해본다고 한다.

 

'조금 정신없지만 개인적으로 벌써 실용성이 느껴져서 재밌다. 그리고 개발자들이 클래스를 만들어서 어떻게 활용할 지 상상이 되기 시작하고 대략적으로 개발이 어떤 식으로 이루어지는지 뭔가 느껴지는 느낌적인 느낌이다'

'JAVA' 카테고리의 다른 글

[JAVA] 06. 연산자  (0) 2022.10.17
[JAVA] 05. 형변환  (0) 2022.10.17
[JAVA] 4. Scanner  (1) 2022.10.14
[JAVA] 3. 변수  (1) 2022.10.13
[JAVA] 1. Package&Class 생성  (0) 2022.10.13