자바(Java) - Math 클래스

지원·2023년 8월 27일

Java Programming

목록 보기
18/25
  • 구글에 java Math api 검색하기

  • 자바 API: 자바 개발자가 제공하는 명령어

  • API 문서: 이런 명령어들의 사용법과 규격을 제공하는 문서


Math 클래스

https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

  • Math는 java.lang.Object를 상속받는다.

  • Math가 가지고 있는 메소드는 모두 static한 메소드이다.
    -> Math 클래스는 인스턴스를 만들 필요가 없다.


예제 1

Math 클래스의 main 메소드 안에서 abs() 메소드를 바로 호출한다.

public class MathTest {
  public static void main(String[] args) {
    int value = Math.abs(-5); // 매개변수로 받은 값을 절댓값으로 변환해 리턴
    System.out.println(value);
  }
}
  • 실행결과
5
  • 아래 코드를 작성하면 컴파일 오류가 발생한다.
Math m = new Math();

왜? Math 클래스는 static 메소드 뿐이니까 인스턴스를 생성할 필요가 없는데, 인스턴스를 만들게 되면 heap 메모리 영역이 낭비되기 때문이다. 그래서 인스턴스 생성을 막은 것이다.


abs() 메소드를 가지는 MyMath 클래스 -> Math 클래스를 어떻게 만들었는지 유추

  • MyMath 클래스에 abs() 메소드 생성한다.
public class MyMath {
  public static int abs(int x){
    if( x < 0) 
      return x * -1;
    else
        return x;
    
  }
}
  • MyMath 클래스를 실행하기 위해 MyMathMain 클래스 생성한다.
public class MyMathMain {
  public static void main(String[] args) {
    int value = MyMath.abs(-5);
    System.out.println(value);
  }
}
  • 실행결과
5
  • 아래의 코드를 작성해도 컴파일 오류가 발생하지 않는다.
MyMath m = new MyMath();

자동으로 생성자가 만들어졌기 때문에 new MyMath() 코드가 컴파일 오류가 발생하지 않는다.

MyMath() 는 생성자이다.

MyMath 클래스가 다음과 같은 생성자를 하나도 생성하지 않는다면 컴파일 시 자동으로 기본 생성자가 만들어진다.

public static int abs(int x) {
	if( x > 0 ) 
    	return x * -1;
	else 
    	return x;
}

기본 생성자는 public MyMath() {}와 같다. ( 반환하지 않고, 생성자명 = 클래스명 )
아무것도 하지 않는 기본 생성자가 컴파일 시 만들어지는 것이다.

public 은 접근 제어자로 어디서든 접근할 수 있다.

기본 생성자인 public MyMath() {}private MyMath() {}로 바꾼다면

MyMath m = new MyMath();

에러가 발생한다. -> 인스턴스를 생성하지 못한다.
-> 인스턴스를 생성하지 못하므로 MyMath클래스는 인스턴스 메소드를 호출하지 못한다.
즉, 인스턴스를 생성 못하면 static이 없는 메소드는 생성을 못해 사용할 수가 없다.

profile
우주 정복자

0개의 댓글