본문 바로가기
JAVA

JAVA 5일차(2)

by teg0 2025. 8. 11.

메서드

클래스 내부에 정의된 함수를 메서드라고 부름

특정 기능을 수행하는 코드블록을 정의하고, 필요할 때 호출하여 재사용 가능

중복 코드 감소와 가독성, 유지보수성 향상

 

[기본구조]

[접근제한자][static] 반환형 메서드이름(매개변수) {

        함수에서 실행할 코드

        [return]; 반환형이 void라면 return을 생략하거나 return으로 메서드 종료

}

package com.kh.method;

public class MethodBasic {

	//main메서드 : 프로그램의 시작을 의미하는 메서드
	public static void main(String[] args) {
		int result = adder(10,5);
		System.out.println("10 + 5 = " + result);
		System.out.println("3.5 * 3.5 = " + square(3.5));
	}
	
	//숫자 두개를 받아서 더한값을 리턴
	public static int adder(int num1, int num2) {
		int result = num1 + num2;
		return result;
	}
	
	public static double square(double num) {
		return (num * num);
	}
}

 

지역변수

블록{} 내부에서 선언된 변수

해당 블록을 벗어나면 메모리에서 제거됨

선언시 초기화 후 사용해야 됨.

 

매개변수

메서드 호출시 외부에서 전달받는 값을 저장하는 지역변수

메서드 선언부에 정의됨

메서드 실행시 생성되고, 메서드 종료시 사라짐.

 

package com.kh.method;

public class MethodLocalVariable {

	public static void main(String[] args) {
		//main의 지역변수로 종료되면 사라짐.
		String name = "철수";
		int age = 20;
		
		System.out.println("say 실행 전 :" + name);
		say(name, age);
		System.out.println("say 실행 후 :" + name);
	}
	
	public static void say(String name, int age) {
		name = "지원";
		System.out.println(name);
		//name, age는 매개변수이자 이 메서드의 지역변수
	}
	
}

say 메서드에서만 지원으로 출력되며 main에서는 변하지 않고 철수로 출력됨.

 

package com.kh.method;

public class MethodLocalVariable {
	
	public static void main(String[] args) {
		
		//Call By Value(값에 의한 호출) -> 자바는 무조건 이방식으로 호출
		//메모리에 담긴 값 자체를 전달
		//기본형 -> 값(데이터) 자체가 복사됨
		//참조형 -> 참조값(주소)이 복사됨
		//			주소값을 복사해서 같은 객체를 가르키게 되므로, 
		//			내부 데이터를 변경하면 원본에도 영향을 줌
		
		//기본형
		int num = 10;
		changeValue(num);
		System.out.println("mian에서 changeValue 호출 후 : " + num);
		
	}

	public static void changeValue(int value) {
		System.out.println("전달받은 value : " + value);
		value = 100;
		System.out.println("변경된 value : " + value);
	}
}

기본형은 값이 전달되며, main의 값은 변하지 않음.

 

package com.kh.method;

public class MethodLocalVariable {

	public static void main(String[] args) {
		
		//참조형
		int[] arr = {1,2,3};
		changeReference(arr);
		System.out.println("main문의 arr---------------------");
		for (int n : arr) {System.out.print(n + " ");}
		
	}
	public static void changeReference(int[] array) {
		System.out.println("전달받은 array------------------------------");
		for (int n : array) {System.out.print(n + " ");}
		System.out.println();
		array[0] = 100;
		System.out.println("전달받은 array 0번째 변경완료");
	}
	
}

참조형을 전달하면 실제 값 자체를 전달하는 것이 아니라 참조형에 담긴 주소값을 전달하기 때문에

해당 주소로 접근해서 원본 데이터를 변경할 수 있다.

그러므로 참조형은 메서드의 원칙을 위반하기에 주의하여 사용해야 한다.

'JAVA' 카테고리의 다른 글

JAVA 7일차  (3) 2025.08.13
JAVA 6일차  (3) 2025.08.12
JAVA 5일차(1)  (2) 2025.08.11
JAVA 4일차(3)  (2) 2025.08.08
JAVA 4일차(2)  (2) 2025.08.08