본문으로 바로가기
반응형

 

 

이전 포스팅에서 자바의 객체클래스, 필드, 생성자에 대해서 다뤄봤습니다.

https://healthdevelop.tistory.com/entry/java9

 

 

 

 

이번 포스팅에선 자바의 메소드에 대해서 다루고자 합니다.

 

 

 


 

 

잠깐 복습을 하자면,,,

 

 

객체지향언어의 정의는

현실세계에 존재하는 사물, 개념을 프로그램에 추상화하여 클래스로 정의한다에 근거합니다.

 

 

 

 

 

객체지향언어의 정의에 의하여 클래스를 생성한다면,

사물 또는 개념이 가지고 있는 "속성"을 프로그램의 "멤버 변수/필드" 로 추상화합니다.

 

 

 

 

 

 

예를 들어 '사람'을 추상화하자면

 

속성은 '이름', '주민등록번호', '전화번호', '주소', '나이', '성별'을 들 수 있죠.

 

이를 클래스로 생성하면 아래와 같습니다.

 

 

class Person1 {
	String name = "홍길동";
	String pNo;
	String phone;
	String address;
	int age;
	char gender;
}

 

 


 

 

 

 

또 캡슐화에 대해서 알아보았었는데요.

 

 

 

캡슐화란,

 

객체를 다른 외부 객체와 구분하여

내부의 데이터 자원에 임의로 접근하지 못하게 하기 위한 방법으로,

캡슐화 원칙에 따라 "멤버 변수/필드"는 private 접근제한자로 사용합니다.

 

 

즉,


외부에서 "멤버 변수/필드" 에 직접 접근을 하지 못하지만

메서드를 통해 간접적으로 접근할 수 있게 만들어 줍니다.

 

 

 

 

 

 

위의 '사람' 클래스로 예를 들자면,

 

class Person2 {
	private String name = "홍길동";
	private String pNo;
	private String phone;
	private String address;
	private int age;
	private char gender;
	
	public String getName() {
		return name;
	}
}

 

 

위의 예처럼 클래스의 변수들을 private으로 제한한다면

 

외부 클래스에선 해당 변수에 접근을 할 수가 없겠죠.

 

 

그래서 직접적인 변수 접근은 안되지만

getName()이라는 함수를 작성해서 name을 return 해주면

 

외부에서 getName()함수를 참조해 name이라는 변수에 간접 접근이 가능하겠죠.

 

 

 

 

 


 

 

 

캡슐화를 복습했으니 인스턴스화도 복습해봅시다.

 

 

 

인스턴스화란 

 

클래스로 정의된 객체를 프로그램으로 동작하기 위해 메모리에 저장하는 것인데요.

 

 

 

그럼 인스턴스란,

 

인스턴스화를 거쳐 생성된 객체를 말합니다.

 

 

 

 

아래 예제는

위에서 생성한 '사람' 클래스를 인스턴스화 해서 인스턴스를 생성해보는 예제입니다.

 

 

public class Sample1 {

	public static void main(String[] args) {
		Person1 p1 = new Person1();
		System.out.println(p1.name);
		
		Person2 p2 = new Person2();
		// 캡슐화로 인해 직접적인 접근 불가.
		// p2.name = "홍길동";
		
		// 외부에 공개된 메서드를 통해 접근
		System.out.println(p2.getName());
	}

}

 

이런 식으로 인스턴스를 생성했습니다.

 

위에서 캡슐화를 진행했기에 name변수에 접근을 하려면

해당 인스턴스에 getName()을 통해서만 접근할 수 있습니다.

 

 

 


 

 

 

 

이제, 자바의 메소드에 대해서 알아봅시다.

 

 

 

자바에서 메소드란,,,

 

 

수학의 함수와 비슷하며 호출을 통해 사용합니다.

 


전달 값이 없는 상태로 호출하거나 혹은 어떤 값을 전달하여 호출할 수 있습니다.


함수 내에 작성된 연산 수행 후 반환 값/결과 값은 있거나 없을 수 있습니다.

 

 

 

 

 

그림으로 보면,

 

 

 

 

전달 값이 있으면, 함수안에서 전달 값으로 연산을 수행하고,

 

결과를 반환합니다.

 

 

 

 

 

 

 

 

 

 

메소드 표현식입니다.

 

기존에 작성해왔던 메소드 형태 그대로입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

메소드 접근제한자 입니다.

 

클래스 접근제한자에서 protectedprivate이 추가된 겁니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

메소드 예약어입니다.

기존의 변수 예약어인 staticfinal은 동일한 의미를 품고 있습니다.

 

 

 

abstractsynchronized가 생소하실 텐데요.

추후에 자바의 상속 부분을 공부하면서 알아보려고 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

메소드 반환형으로는 위와 같습니다.

 

 

void반환형이 없는 메소드입니다. 

일반적으로 출력문만 표현하는 메소드를 작성할 때 많이 쓰입니다.

 

 

기본 자료형, 배열 등은 잠시 후에 살펴보려고 합니다.

 

 

 

 

 

 

 

 

메소드의 매개변수입니다.

 

글로보면 이해가 안 될 수 있으니 후에 예제를 통해 살펴보도록 합시다.

 

 

 

 

 

 

 

그럼 메소드 표현식에 대해서 알아봅시다.

 

 

 


 

 

 

 

● 매개변수가 없고 리턴 값이 있을 때

    

 

 

 

 

 

 

 

 

● 매개변수가 없고 리턴 값이 없을 때

    

 

 

 

 

 

 

● 매개변수가 있고 리턴 값이 있을 때

 

 

 

 

 

 

● 매개변수가 있 리턴 값이 있을 때

 

 

 

 


 

 

 

표현식은 보통 위 4가지로 많이 쓰입니다.

 

 

 

 

 

 

이제 gettersetter 메소드를 알아보려 하는데요.

 

 

 

이 메소드들을 잘 숙지하고 있어야 합니다.

 

추후에 웹개발(백엔드)에 들어갈 때 모델(객체)을 생성할 때

 

이 getter와 setter 메소드가 필수로 쓰입니다.

 

 

 

물론 요즘엔 자동 삽입 기능이 나왔지만,

그래도 기본적인 지식은 갖고 있어야 합니다.

 

 

 

 

 

먼저 setter 메소드에 대해서 알아봅시다.

 

 

 

 


 

 

● setter() 메소드

 

 

 

 

setter 메소드란,

 

필드에 변경할 값을 전달받아서 필드 값을 변경하는 메소드인데요.

 

 

 

 

예를 들어,,

 

 

 

위와 같은 표현식이 있다고 합시다.

 

studentNo라는 변수는 private으로 되어있어 외부에서 접근을 할 수 없다고 하면,

 

setter 메서드를 통해 접근해서 값을 변경할 수 있다는 것이죠.

 

 

 

여기서 주의할 점은 

 

setter메소드는 단순 값 변경을 위한 목적이기에

 

반환 값이 없는 void를 사용합니다!

 

 

 

 

 

 

 

● getter() 메소드

 

 

 

 

getter 메소드란,

 

필드에 기록된 값을 읽어서 요청한 쪽으로 읽은 값을 넘기는 메소드인데요.

 

 

 

 

그림으로 보면,,

 

 

위의 setter와 같이 private으로 보호받는 변수의 접근을 하기 위해 쓰이는데요.

 

getter는 단순히 변수 값만 받아오는 목적으로 사용됩니다.

 

따라서 반환 값이 있는 형태로 작성해야 합니다!

 

 

 

 

 


 

 

 

 

마지막으로 return을 알아봅시다.

 

 

return 이란,

 

해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어인데요.

 


반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아갑니다.

 

 

 

 

 

 

 

 

프로그램 실행 시 main method가 먼저 호출되고,

 

순차적으로 method1, method2가 호출되지만

 

return(반환)은 마지막에 호출된 method2가 먼저 됩니다.

 

 

 

 

 

 

 

 

이상 자바의 메서드에 대해서 알아보았는데요.

 

 

 

그럼 간단한 메소드의 예제를 살펴봅시다.

 

메소드는 복잡한 알고리즘을 요구하는 문제보단 여러 타입의 메소드를 생성하는

복합문제를 풀어봅시다.

 

 

 

 

 

 

 

 

 


메소드 예제


 

 

 

 

난이도 ★

 

 

 

예제 1

 

 

Q : 각 조건에 맞는 반환형이 없는 메소드(void)를 작성하고 답을 구하라.

 

 

  // 짝수 홀수 구분하여 짝수면 true 출력 홀수면 false 출력
p.isEven(10); p.isEven(11);

 

// 짝수 홀수 구분하여 짝수면 false 출력 홀수면 true 출력
p.isOdd(10); p.isOdd(11);

 

// 2의 배수면 true 출력 아니면 false 출력
p.isMulti(10); p.isMulti(15);

 

// 3의 배수면 true 출력 아니면 false 출력
p.isMulti(10, 3); p.isMulti(15, 3);

 

// 5의 배수면 true 출력 아니면 false 출력
p.isMulti(10, 5); p.isMulti(15, 5);

 

// 가장 큰 값을 출력
p.max(10, 20); p.max(20, 5);

int arr1[] = {1, 7, 9, 3, 8};
p.max(arr1);

// 가장 작은 값을 출력
p.min(10, 20); p.min(20, 5);

int arr2[] = {1, 7, 9, 3, 8};
p.min(arr2);

 

 

 

 

 

 


 

 

 

 

public class Sample1 {

	public static void ex1() {
		Prac1 p = new Prac1();
		
		// 짝수 홀수 구분하여 짝수면 true 출력 홀수면 false 출력
		p.isEven(10);	p.isEven(11);
		
		// 짝수 홀수 구분하여 짝수면 false 출력 홀수면 true 출력
		p.isOdd(10);	p.isOdd(11);
		
		// 2의 배수면 true 출력 아니면 false 출력
		p.isMulti(10);	p.isMulti(15);
		
		// 3의 배수면 true 출력 아니면 false 출력
		p.isMulti(10, 3);	p.isMulti(15, 3);
		
		// 5의 배수면 true 출력 아니면 false 출력
		p.isMulti(10, 5);	p.isMulti(15, 5);
		
		// 가장 큰값을 출력
		p.max(10, 20);		p.max(20, 5);
		
		int arr1[] = {1, 7, 9, 3, 8};
		p.max(arr1);
		
		// 가장 작은값을 출력
		p.min(10, 20);		p.min(20, 5);
		
		int arr2[] = {1, 7, 9, 3, 8};
		p.min(arr2);
	}
    
    public static void main(String[] args) {
		ex1();
		
	}
}

 


public class Prac1 {

	public void isEven(int num) {
		if(num % 2 == 0) {
			System.out.println("true");
		}else {
			System.out.println("false");
		}
	}
	
	public void isOdd(int num) {
		if(num % 2 == 1) {
			System.out.println("true");
		}else {
			System.out.println("false");
		}
	}
	
	public void isMulti(int num) {
		if(num % 2 == 0) {
			System.out.println("true");
		}else {
			System.out.println("false");
		}
	}
	
	public void isMulti(int num1, int num2) {
		if(num1 % num2 == 0) {
			System.out.println("true");
		}else {
			System.out.println("false");
		}
	}
	
	public void max(int num1, int num2) {
		if(num1 > num2) {
			System.out.println("둘 중 더 큰 값은 : " + num1);
		}else if(num2 > num1) {
			System.out.println("둘 중 더 큰 값은 : " + num2);
		}else {
			System.out.println("두 수는 같습니다.");
		}
	}
	
	public void max(int arr[]) {
		if(arr.length < 1) {
			System.out.println("배열 길이는 최소 1이상 이어야함");
		}
		int max = arr[0];
		for(int i=1; i<arr.length; i++) {
			if(max < arr[i]) {
				max = arr[i];
			}
		}
		
		System.out.println("배열 내에서 최댓값은 : " + max);
	}
	
	public void min(int num1, int num2) {
		if(num1 > num2) {
			System.out.println("둘 중 더 작은 값은 : " + num2);
		}else if(num2 > num1) {
			System.out.println("둘 중 더 작은 값은 : " + num1);
		}else {
			System.out.println("두 수는 같습니다.");
		}
	}
	
	public void min(int arr[]) {
		if(arr.length < 1) {
			System.out.println("배열 길이는 최소 1이상 이어야함");
		}
		int min = arr[0];
		for(int i=1; i<arr.length; i++) {
			if(min > arr[i]) {
				min = arr[i];
			}
		}
		
		System.out.println("배열 내에서 최소값은 : " + min);
	}
	
}

 

 

 

 


 

 

 

 

 

난이도 ★

 

 

 

예제 2

 

 

Q : 각 조건에 맞는 반환형이 있는 메소드를 작성하고 답을 구하라.

 

 

  // 짝수 홀수 구분하여 짝수면 true 출력 홀수면 false 출력
p.isEven(10); p.isEven(11);

 

// 짝수 홀수 구분하여 짝수면 false 출력 홀수면 true 출력
p.isOdd(10); p.isOdd(11);

 

// 2의 배수면 true 출력 아니면 false 출력
p.isMulti(10); p.isMulti(15);

 

// 3의 배수면 true 출력 아니면 false 출력
p.isMulti(10, 3); p.isMulti(15, 3);

 

// 5의 배수면 true 출력 아니면 false 출력
p.isMulti(10, 5); p.isMulti(15, 5);

 

// 가장 큰 값을 출력
p.max(10, 20); p.max(20, 5);

int arr1[] = {1, 7, 9, 3, 8};
p.max(arr1);

// 가장 작은 값을 출력
p.min(10, 20); p.min(20, 5);

int arr2[] = {1, 7, 9, 3, 8};
p.min(arr2);

 

 

 

 

 

 


 

 

 

 

public class Sample1 {

	public static void ex2() {
		Prac2 p = new Prac2();
		
		// 짝수 홀수 구분하여 짝수면 true 리턴 홀수면 false 리턴
		System.out.println(p.isEven(10)); System.out.println(p.isEven(11));
		
		// 짝수 홀수 구분하여 짝수면 false 리턴 홀수면 true 리턴
		System.out.println(p.isOdd(10)); System.out.println(p.isOdd(10));
		
		// 2의 배수면 true 리턴 아니면 false 리턴
		System.out.println(p.isMulti(10)); System.out.println(p.isMulti(15));
		
		// 3의 배수면 true 리턴 아니면 false 리턴
		System.out.println(p.isMulti(10, 3)); System.out.println(p.isMulti(15, 3));
		
		// 5의 배수면 true 리턴 아니면 false 리턴
		System.out.println(p.isMulti(10, 5)); System.out.println(p.isMulti(15, 5));
		
		// 가장 큰값을 리턴
		System.out.println("둘 중 큰 값은 : " + p.max(10, 10));
		
		System.out.println("둘 중 큰 값은 : " + p.max(20, 5));
		
		
		int arr1[] = {1, 7, 9, 3, 8};
		System.out.println("배열 내에서 가장 큰 값은 : " + p.max(arr1));
		
		// 가장 작은값을 리턴
		System.out.println("둘 중 작은 값은 : " + p.min(10, 20));		
		System.out.println("둘 중 작은 값은 : " + p.min(20, 5));	
		
		int arr2[] = {1, 7, 9, 3, 8};
		System.out.println("배열 내에서 가장 작은 값은 : " + p.min(arr2));
	}
    
    public static void main(String[] args) {
		ex2();
		
	}
}

 


public class Prac2 {
	public boolean isEven(int num) {
		if(num % 2 == 0) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean isOdd(int num) {
		if(num % 2 == 1) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean isMulti(int num) {
		if(num % 2 == 0) {
			return true;
		}else {
			return false;
		}
	}
	
	public boolean isMulti(int num1, int num2) {
		if(num1 % num2 == 0) {
			return true;
		}else {
			return false;
		}
	}
	
	public int max(int num1, int num2) {
		if(num1 > num2) {
			return num1;
		}else
			return num2;
		
		
	}
	
	public int max(int arr[]) {
		
		int max = arr[0];
		for(int i=1; i<arr.length; i++) {
			if(max < arr[i]) {
				max = arr[i];
			}
		}
		
		return max;
	}
	
	public int min(int num1, int num2) {
		if(num1 > num2) { 
			return num2;
		}
		return num1;
	}
	
	public int min(int arr[]) {
		
		int min = arr[0];
		for(int i=1; i<arr.length; i++) {
			if(min > arr[i]) {
				min = arr[i];
			}
		}
		
		return min;
	}
}

 

 

 

 

 

 

 

이상 java의 메소드를 마치겠습니다.

 

 

 

 

 

 

다음 포스팅에선 java 객체 실습문제에 대해 다뤄보고자 합니다.

https://healthdevelop.tistory.com/entry/java11

 

[Java] 자바 메소드 예제 | java 객체 예제 | 실습문제 (java로 웹개발하기)(day11)

이전까지 자바의 기초부터 객체까지 다뤄봤습니다. 객체의 배열을 학습하기전, 메소드를 활용한 자바 객체의 실습문제를 풀어봅시다!! 자바 객체(메소드) 예제 난이도 ★★★★★ 예제 1 Q : 다

healthdevelop.tistory.com

 

반응형