자바에서의 메소드 - 2

2022. 3. 22. 20:30·Language/Java
728x90
반응형

이번 글에서는 자바에서 자주 쓰이는 메소드의 형태를 소개하려고 한다.

 

오버로딩에 관한 예제 코드이다.

 

나는 사칙 연산을 Main class에서 하려고 하는데 이 때 Calculator라는 클래스를 새로 설계하여 사용할 것이다.

 

Calculator.java

public class Calculator {
	//멤버 메소드
	//더하기 메소드
	int sum(int x, int y) {
		return x + y;
	}
	
	//빼기 메소드
	int subtract(int x, int y) {
		return x - y;
	}
	
	//곱셈 메소드
	int multiply(int x, int y) {
		return x * y;
	}
	
	//나눗셈 메소드
	int divide(int x, int y) {
		return x / y;
	}
	
	//실수형 값에 대한 사칙연산 메소드를 추가
	//유사 기능을 단순히 자료형이 다르다고해서 메소드 이름을 별도로 만들면 나중에 사용하는 쪽에서 매우 불편
	
	//메소드 이름은 같고 파라미터는 다른 메소드를 제작
	//method overloading
	double sum(double x, double y) {
		return x + y;
	}
	
	double subtract(double x, double y) {
		return x - y;
	}
	
	double multiply(double x, double y)	{
		return x * y;
	}
	
	double divide(double x, double y) {
		return x / y;
	}
	
	//문자열 데이터를 받아서 int로 바꾸어 산술 연산하는 메소드
	int sum(String x, String y) {
		int a = Integer.parseInt(x);
		int b = Integer.parseInt(y);
		
		return a + b;
	}
	
	
}

 

 

Main.java

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int a = 10;
		int b = 4;
		
		//사칙연산을 해주는 계산기 객체 생성(메소드만 있는 클래스)
		Calculator cal = new Calculator();
		
		int sum = cal.sum(a, b);
		System.out.println(sum);
		
		int sub = cal.subtract(a, b);
		System.out.println(sub);
		
		int mul = cal.multiply(a, b);
		System.out.println(mul);
		
		int div = cal.divide(a, b);
		System.out.println(div);
		
		//실수형 숫자에 대한 사칙연산 의뢰
		//메소드 오버로딩에 대한 학습
		double c = 3.5;
		double d = 4.6;
		
		//메소드 오버로딩
		System.out.println(cal.sum(c, d));
		System.out.println(cal.subtract(c, d));
		System.out.println(cal.multiply(c, d));
		System.out.println(cal.divide(c, d));
		
		//원한다면 문자열 데이터의 산술 연산 기능도 만들 수 있다
		System.out.println("123" + "456");
		System.out.println(cal.sum("123", "456"));
		
		//별외기능
		//메소드 파라미터를 만들 때 "가변길이 인자"라는 문법
		Test t = new Test();
		t.aaa();
		t.aaa(10);
		t.aaa(10, 20);
		
		System.out.println(t.bbb());
		System.out.println(t.bbb(10));
		System.out.println(t.bbb(5, 3));
		System.out.println(t.bbb(4, 2, 6));

	}

}

class Test {
	//가변 길이 인자 [...]
	void aaa(int... n) {
		//가변 길이 인자 변수 n은 배열의 참조 변수
		//System.out.println(n); //[I@xxxxxxx 출력
		
		for (int i = 0; i < n.length; i++) {
			System.out.print(n[i] + "  ");
		}
		System.out.println();
	}
	
	//가변 길이 인자는 오버로딩 불가
	int bbb(int... n) {
		int sum = 0;
		for (int t : n) {
			sum += t;
		}
		return sum;
	}
}

 

먼저 메소드를 오버로딩하여 사용하는 이유는 간단하다.

 

같은 이름의 메소드를 사용하는데 불편함을 덜기 위해서이다.

 

지금 위의 예제처럼 덧셈을 하고싶을 때, 원래대로는 정수형 메소드와 실수형 메소드의 이름을 나눠야 한다.

 

하지만, 메소드 오버로딩을 통해 같은 이름 하나로 두 작업을 모두 할 수 있다.

 

이 경우, 이클립스에서 sum()이라는 메소드를 호출할 때 자동완성으로 두 줄이 뜨게되고

당연히 둘 중에 한 메소드를 선택해 파라미터의 타입을 맞춰쓰면 된다.

 

그리고 Calculator.java를 쭉 내리면서 보다보면 문자열 데이터를 입력받아 정수형 덧셈을 하는 메소드가 있는데

사실 이 메소드는 예외의 소지가 다분하다. 이는 추후에 예외에 관한 글로 다시 소개해보도록 하겠다.

 

 

이어서, Main.java에 Test라는 클래스에서 가변 길이 인자라는 문법을 사용했는데

지금까지 본 클래스들 중에 이 문법을 사용하는 메소드는 보지 못했다.

 

그리고 당연하게도 이 메소드는 오버로딩이 불가능하다. 왜냐하면, 파라미터의 개수가 정해져 있지 않기 때문이다.

728x90
반응형
저작자표시

'Language > Java' 카테고리의 다른 글

자바의 접근 제한자(Access Modifier)  (0) 2022.04.28
자바의 변수 종류  (0) 2022.03.25
자바에서의 메소드  (0) 2022.03.10
자바의 패키지  (0) 2022.03.07
자바의 클래스 소개  (0) 2022.03.02
'Language/Java' 카테고리의 다른 글
  • 자바의 접근 제한자(Access Modifier)
  • 자바의 변수 종류
  • 자바에서의 메소드
  • 자바의 패키지
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237) N
      • Android (84)
      • Language (63) N
        • Java (19)
        • Kotlin (27) N
        • Swift (17)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 해외여행 (0)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java
    room
    LiveData
    ios
    배열
    viewModelScope
    Kotlin
    Observer
    오블완
    자바
    MVVM
    aac
    programmers
    코틀린
    getNumericValue
    daterangepicker
    안드로이드
    CodeLab
    프로그래머스
    SWIFT
    databinding
    스위프트
    ViewModel
    coroutines
    Material
    PCCE
    jetpack
    코루틴
    android
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
자바에서의 메소드 - 2
상단으로

티스토리툴바