자바 클래스를 생성하면 public 함수 static 선언자를 사용할 일이 굉장히 많다. 그 중에서 여러가지 사례를 한 번 공부해보았다.
//*Student.class 파일
public class Student { //클래스
String name; //멤버 변수
int age;
boolean isMarried;
int children;
public void peopleInfo(){ //멤버 함수
System.out.println("이름 :"+name);
System.out.println("나이 :"+age);
System.out.println("결혼 유무 :"+isMarried);
System.out.println("자녀 수 :"+children);
}
}
class Jone{ //클래스
String name = "Jone"; //멤버 변수
int age = 17;
boolean isMarried = true;
public void info(){ //멤버 함수
System.out.println("이름 :"+name);
System.out.println("나이 :"+age);
System.out.println("결혼 유무 :"+isMarried);
}
}
위 Student.class 파일에서 public을 붙혀서 만들 수 있는
파일내 클래스는 파일명과 똑같은 이름을 가진 클래스 밖에 못 만든다.
따라서, public class Student 이런식의 이름을 가진 클래스만이 public 선언자를 가지고 태어날 수 있다.
반대로 일반 class명은 public을 붙히면 오류가 뜬다.
public void TestFunction(){}
static void TestFunction(){}
이 때의 static과 public의 차이점에 대해서 알아보자
public class MethodTest {
int a = 4;
//static 함수
//static을 사용할 수 있는 메모리 영역이 많지 않아 속도 지연이 일어날 수 있음
//같은 기능을 하는 함수이름을 매번 다르게 정해줘야함
static void staticMethod() {
//System.out.println("a 값 : "+a);
//static은 프로그램 실행 동시에 메모리에 올라가기 때문에
//static 함수 안에서 인스턴스 변수는 사용 불가능하다.
//인스턴스 변수는 객체를 생성해야 사용 가능하기 때문에
System.out.println("static 함수는 객체 생성없이 사용 가능");
//publicMethod(); public은 클래스 안에서 사용 불가
}
//public 함수
//객체에서만 접근할 수 있음
//객체를 생성하고 객체명을 통해서만 호출이 가능
public void publicMethod() {
System.out.println("public 함수는 객체 생성후 사용 가능");
}
//생성자 함수
public MethodTest() { } //내용이 없으면 작성 안해도 됨
}
public
- 객체 생성하고 객체명을 통해서만 호출 가능
ex) MethodTest test = new MethodTest();
test.publicMethod()
이런 형식으로 사용해야함- 객체를 생성해야 사용할 수 있으므로 생성 안하고 클래스
안에서는 사용 못한다.
static
- 프로그램 실행과 동시에 메모리에 올라간다.
- 객체 생성 유무와 상관없이 클래스 안에서 사용 가능
- static 함수 안에서 인스턴스 변수는 사용 불가능
->인스턴스 변수는 객체를 생성해야 사용 가능하기 때문에
public과 static을 동시에 쓰는 함수는 없을까?라는 생각이 들 수 있는데 실제로도 Main 함수는 public과 static을 동시에 쓴다.
//main 함수
//메모리에 로딩되어야 사용할 수 있으므로 public 선언자를 가지고 있어야함
//한 번 불러놓고 삭제하면 안되므로 프로그램 종료 전까지 존재해야함 따라서 static 함수
public static void main(String[] args){
staticMethod();
MethodTest mt = new MethodTest();
mt.publicMethod();
}
Main 함수
- 접근제한자인 public 선언자가 있어야 모든 곳에서 접근할 수 있다. 만약 private이나 protected가 붙어있으면
다른 클래스에서 접근 불가능- static은 프로그램 실행과 종료 전까지 실행되어야 하므로
static 선언자가 붙는다.
마지막으로 자바 main()메서드가 실행될 때 메모리에서 어떤 일이 발생하는 지에 대해 좋은 글이 있길래 링크를 첨부했다
메서드가-실행될-때-T메모리에서는-무슨-일이-일어날까