[JAVA]static vs public

심현민·2023년 9월 6일
0

[JAVA] 삽질

목록 보기
2/2
post-thumbnail

자바 클래스를 생성하면 public 함수 static 선언자를 사용할 일이 굉장히 많다. 그 중에서 여러가지 사례를 한 번 공부해보았다.

첫 번째, 클래스 파일 내에 public class와 일반 class 차이점

//*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 함수 vs static 함수

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 함수

//main 함수
    //메모리에 로딩되어야 사용할 수 있으므로 public 선언자를 가지고 있어야함
    //한 번 불러놓고 삭제하면 안되므로 프로그램 종료 전까지 존재해야함 따라서 static 함수
    public static void main(String[] args){       
                                                  
        staticMethod();
        
        MethodTest mt = new MethodTest();
        mt.publicMethod();
    }

Main 함수

  • 접근제한자인 public 선언자가 있어야 모든 곳에서 접근할 수 있다. 만약 private이나 protected가 붙어있으면
    다른 클래스에서 접근 불가능
  • static은 프로그램 실행과 종료 전까지 실행되어야 하므로
    static 선언자가 붙는다.

마지막으로 자바 main()메서드가 실행될 때 메모리에서 어떤 일이 발생하는 지에 대해 좋은 글이 있길래 링크를 첨부했다
메서드가-실행될-때-T메모리에서는-무슨-일이-일어날까

profile
개발하고 싶은 사람

0개의 댓글