(JAVA) 메서드, 메서드 오버로딩, static메서드와 인스턴스 메서드

InAnarchy·2022년 10월 20일
0

JAVA

목록 보기
11/18
post-thumbnail

Table of Contents

  • 메서드의 구성
  • 매개변수와 인수
  • 매개변수의 개수를 모를 경우
  • return
  • return값에 따른 메서드의 네가지 종류
  • static 메서드와 인스턴스 메서드
  • 메서드 오버로딩

메서드의 구성

class Calculator {
    void powerOn() {
        System.out.println("전원을 켭니다");
    }

    int plus(int x, int y) {
        int result = x + y;
        return result;
    }

    double divide(int x, int y) {
        double result = (double) x / (double) y;
        return result;
    }

    void powerOff() {
        System.out.println("전원을 끕니다");
    }
}

public class CalculatorExample {
    public static void main(String[] args) {
        Calculator mycal = new Calculator();
        mycal.powerOn();

        int result1 = mycal.plus(5,6);
        System.out.println("result1: " + result1);

        byte x = 10;
        byte y = 4;

        double result2 = mycal.divide(x,y);
        System.out.println("result2: " + result2);
        mycal.powerOff();
    }
}
class Calculator {
    long add(long a, long b) {
        return a+b;
    }
    long subtract(long a, long b) {
        return a-b;
    }
    long multiply(long a, long b) {
        return a*b;
    }
    double divide(double a, double b) {
         return a/b;
    }
}

public class CalculatorExample {
    public static void main(String[] args) {
        Calculator mycal = new Calculator();
        long result1 = mycal.add(5L, 3L);
        long result2 = mycal.subtract(5L, 3L);
        long result3 = mycal.multiply(5L, 3L);
        double result4 = mycal.divide(5L, 3L);

        System.out.println("add: " + result1);
        System.out.println("subtract: " + result2);
        System.out.println("multiply: " + result3);
        System.out.println("divide: " + result4);
    }
}

매개변수와 인수

매개변수(parameter)는 메서드에 입력으로 전달된 값을 받는 변수
인수(argument)는 메서드를 호출할 때 전달하는 입력값!

매개변수의 개수를 모를 경우

매개변수를 배열 타입으로 선언하거나 값의 목록만 넘겨준다

class Computer {
    int sum1(int[] values) { //배열타입으로 선언하거나
        int sum = 0;
        for (int i = 0; i < values.length; i++) {
            sum += values[i];
        }
        return sum;
    }

    int sum2(int... values) { //배열을 생성하지 않고 값의 목록만 넘겨줌
        int sum = 0;
        for (int i = 0; i < values.length; i++) {
            sum += values[i];
        }
        return sum;
    }
}

public class ComputerExample {
    public static void main(String[] args) {
        Computer mycom = new Computer();

        int[] values1 = {1, 2, 3};
        int result1 = mycom.sum1(values1); //배열을 넘겨줌으로써 전달가능
        System.out.println("result1: " + result1);

        int result2 = mycom.sum1(new int[]{1, 2, 3, 4, 5}); //배열을 넘겨줌으로써 전달가능
        System.out.println("result2: " + result2);

        int result3 = mycom.sum2(1, 2, 3); //메서드 호출 시 넘겨준 값의 수에 따라 자동 배열 생성
        System.out.println("result3: " + result3);

        int result4 = mycom.sum2(1, 2, 3, 4, 5); //메서드 호출 시 넘겨준 값의 수에 따라 자동 배열 생성
        System.out.println("result4: " + result4);
    }
}

return

실행중인 메서드를 종료하고 호출한 곳으로 되돌아감.
리턴 타입이 있는 메서드는 반드시 리턴을 사용해야 함.

int max(int a, int b) {
	if(a > b)
		return a;      
}
이 아닌

int max(int a, int b) {
	if(a > b)
		return a;
	else
		return b;      
}

리턴 타입이 void면 생략 가능.

또 반환값으로 변수가 아닌 수식을 적을 수 있다.

int add(int x, int y){
    int reulst = x + y;
    return result;
}


int add(int x, int y){
    return x+y;
}

위 코드는 같은 결과값이다.

또 조건 연산자를 사용해서 반환할 수도 있다.


int abs(int x){
    if(x>=0) {
        return x;
    }
    else{
        return -x;
    }
}

int abs(int x){
    return x>= ? x : -x;
}

위 코드는 같은 결과값이다.

예컨대

long max(long a, long b){
    long result = 0;
    if(a>b) {
        result = a;
    }
    else {
        result = b;
    }
    return result;
    }
}

이 코드는

long max(long a, long b) {
    long result = 0;
    result = a > b ? a : b;
    return result;
}

또는

long max(long a, long b) {
    return a > b ? a : b;
}

으로 줄일 수 있다.

return값에 따른 메서드의 네가지 종류

  • 입력과 출력이 모두 있는 메서드(일반적인 메서드)
int sum(int a, int b){
	return a+b;
}
  • 입력과 출력이 모두 없는 메서드
void say(){
	System.out.println("Hi");
}
  • 입력은 없고 출력은 있는 메서드
String say(){
	return "Hi";
}
  • 입력은 있고 출력은 없는 메서드
void sum(int a, int b){
	System.out.println(a+"과 "+b+"의 합은 " + (a+b));
}

static 메서드와 인스턴스 메서드

  • static메서드는 객체를 생성하지 않고도 클래스이름.메서드이름 과 같은 식으로 호출할 수 있다.
  • 인스턴스 메서드는 반드시 객체를 생성해야 호출할 수 있는, 인스턴스 변수를 필요로 하는 메서드이다.
class Calculator {

    long a, b;
    
    //인스턴스변수 a,b만 이용해서 작업하므로 매개변수 필요 없음
    long add() {
        return a + b;
    }

    long subtract() {
        return a - b;
    }

    long multiply() {
        return a * b;
    }

    double divide() {
        return a / b;
    }
    //매개변수만으로 작업 가능
    static long add(long a, long b) {
        return a + b;
    }

    static long subtract(long a, long b) {
        return a - b;
    }

    static long multiply(long a, long b) {
        return a * b;
    }

    static double divide(long a, long b) {
        return a / (double) b;
    }
}

public class CalculatorExample {
    public static void main(String[] args) {
        //클래스 메서드 호출
        System.out.println(Calculator.add(200L, 100L));
        System.out.println(Calculator.subtract(200L, 100L));
        System.out.println(Calculator.multiply(200L, 100L));
        System.out.println(Calculator.divide(200L, 100L));

        Calculator mycal = new Calculator();
        mycal.a = 300L;
        mycal.b = 200L;
        //인스턴스 메서드는 객체 생성 후에 호출 가능
        System.out.println(mycal.add());
        System.out.println(mycal.subtract());
        System.out.println(mycal.multiply());
        System.out.println(mycal.divide());
    }
}

그렇다면 static을 언제 붙여야할까?

  • 공통 속성에 static을 붙인다.
  • 인스턴스 멤버를 사용하지 않는 메서드에 static을 붙인다.

메서드 오버로딩

  • 클래스 내에 같은 이름의 메서드를 여러개 선언하는 것
  • 매개변수는 다르지만 같은 의미의 기능 수행



class Calculator {
    double areaRectangle(double width) {
        return width * width;
    }

    double areaRectangle(double width, double height) {
        return width * height;
    }
}

public class CalculatorExample {
    public static void main(String[] args) {
        Calculator mycal = new Calculator();

        double result1 = mycal.areaRectangle(10);
        double result2 = mycal.areaRectangle(10, 20);

        System.out.println("result1: " + result1);
        System.out.println("result2: " + result2);
    }
}
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글