Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[2주차] 30. static 멤버함수 정의시 주의할 점* 본문

K-DigitalTraining 강의/1. Java

[2주차] 30. static 멤버함수 정의시 주의할 점*

이대곤 2022. 5. 23. 14:24

* 클래스 내에서 멤버함수를 정의할 때, 앞의 'static'은 필요에 따라 있어도 되고, 없어도 되는데,
  'static'을 붙이면 static변수(=클래스변수)와 동일하게 객체를 생성하기 전부터 메모리에 올라가
   바로 클래스명으로 함수를 호출하는게 가능하다.
   반대로, 만약 함수 정의시 'static'을 붙이지 않았다면 객체를 생성 후 객체를 통해 함수를 호출해야한다.

 

* 위 원리로 컴파일될 때 객체를 만들지 않아도 main 함수가 호출될 수 있도록 static이 붙는 것임.

 

* mian 함수 같은 "static 메서드는 static 메서드만 (바로) 호출할 수 있다."

   static이 아닌 메서드를 호출하고자 한다면 객체를 생성 후 호출해야 한다.

Q. 첫번째 문제, 아래에서 뭐가 문제인지 찾고 올바른 수정 방향을 제시하시오

import java.util.Scanner;

class Student{
	int kor;
	int eng;
	int math;
	
	int sum() {
		return kor + eng + math;
	}
	
	static double avg() {
		return (double)sum()/3; // 클래스 내의 함수를 이렇게 사용할 수도 있음.
	}
}

실행결과

- 컴파일 오류

첫번째 문제에 대한 올바른 해답

문제해결 첫번째 방법

static 함수는 static 함수만 호출할 수 있어서, 위의 상태에서는 avg함수가 sum 함수를 사용할 수 없는 상태이다.

따라서, sum 멤버함수도 static 함수로 만들어줘야 함.

static int sum() {
		return kor + eng + math;
	}
Comments