TIL

day16 TIL

dalooong 2023. 7. 7. 01:25

2023-05-09 화

스태틱 메소드(Static Method)

: 메소드를 호출 하려면 new를 이용해 메소드가 들어있는 클래스의 인스턴스를 생성해야만 호출 할 수 있습니다.

하지만, static을 붙이면 JVM이 실행 될 때 인스턴스를 생성하므로 new를 이용해 인스턴스를 생성하지 않고도 main() 메소드에서 바로 메소드를 호출 할 수 있습니다.

main()에서 바로 쓸 수 있을 뿐만 아니라 모든 곳에서 불러와 쓸 수 있습니다.

 

스태틱 메소드 선언 방법

public class Calculator {
public void plus() {
System.out.println(1 + 1);
}
public void printPlusOne(int num) {
37
System.out.println(num + 1);
}
public void printPlus(int num1, int num2) {
System.out.println(num1 + num2);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.printPlus(10, 20);
calculator.printPlus(20, 30);
}
}
  • 스태틱 메소드 호출 : 인스턴스를 따로 생성하지 않고 메소드 이름 만으로도 호출 가능합니다.
public class Calculator {
// 생략
public static void printMinus(int num1, int num2) {
System.out.println(num1 - num2);
}
public static void main(String[] args) {
printMinus(10, 20);
}
}
결과 -10
  • 다른 클래스에서 스태틱 메소드 호출하기 : 스태틱 메소드는 접근 제어자를 public으로 해놓았다면 다른 클래스에서도 바로 호출해서 쓸 수 있습니다. new를 쓰지 않고 호출이 가능하지만, 호출하려는 스태틱 메소드가 어떤 클래스에 선언된 메소드 인지를 지정 해주어야 합니다.
public class CalculatorTest {
public static void main(String[] args) {
Calculator.printMinus(10, 20);
}
}
결과 -10
  • Integer.parseInt() Math.pow() 등은 스테틱 메소드이기 때문에 인스턴스를 따로 생성하지 않고도 호출이 가능합니다.
public class PreDefinedStaticMethod {
public static void main(String[] args) {
Integer.parseInt("30");
Math.pow(2, 10);
}
}

 

리팩토링

: main()에서 실행 하는 것이기 때문에 스태틱 메소드를 이용해 분리하는 것

  • System.out.println()이 반복되는 케이스

매개변수 (Parameter) 만들기

매개변수는 메소드를 호출하는 곳에서 메소드로 값을 보낼 때 받아주는 역할을 하는 변수입니다.

매개변수로는 int타입의 이차원 배열인 int[][]arr을 받아줍니다.

분리가 완료된 코드

import java.util.Arrays;
public class SeparateToMethod3 {
43
public static void printArray(int[][] arr) {
System.out.println(Arrays.toString(arr[0]));
System.out.println(Arrays.toString(arr[1]));
System.out.println(Arrays.toString(arr[2]));
}
public static void main(String[] args) {
int[][] arr = {
{10, 20, 30},
{40, 50, 60},
{70, 80, 90}
};
printArray(arr);
}
}
결과
[10, 20, 30]
[40, 50, 60]
[70, 80, 90]
  • this 는 클래스는 가리킵니다. (클래스 자체를 지칭)
  • super는 부모 클래스
  • extentds는 자식 클래스