본문 바로가기
개발/Java

객체 생성과 static 과의 관계

by BellOne4222 2024. 1. 28.

객체 생성과 static 과의 관계


  • 객체 생성을 못하게 막기 위해서 클래스의 생성자를 private으로 설정할 수 있다.
    • new를 사용하여 객체 생성 불가
    • 자주 사용하는 클래스들은 객체를 생성하지 않고(private으로 선언) 클래스에 직접 접근해서 메서드 사용 하기 위해서 객체 생성을 막는다.
public class AllStatic {
    private AllStatic(){  }
    public static int hap(int a, int b){
        int v=a+b;
        return v;
    }
    public static int max(int a, int b){
        return a>b ? a : b;
    }
    public static int min(int a, int b){
        return a<b ? a : b;
    }
}

public class AllStaticTest {
    public static void main(String[] args) {

        // 메서드가 전부 static으로 설정되어 있지 않을 때
        // AllStatic의 생성자를 private으로 만들면 불가능
        //AllStatic st=new AllStatic();
        //System.out.println(st.hap(10,20)); // 30
        //System.out.println(st.max(10,20)); // 20
        //System.out.println(st.min(10,20)); // 10

        // 메서드가 전부 static으로 설정되었을 때, 생성자를 private으로도 선언 할 수 있다.
        // 모든 멤버가 static 일 때, 메서드를 모두 static으로 만들어서 객체 생성을 못하게 만들 수 있다.
        // 아래 방식으로 코드를 구현해야 한다.
        System.out.println(AllStatic.hap(10,20));
        System.out.println(AllStatic.max(10,20));
        System.out.println(AllStatic.min(10,20));

        //System sys=new System(); // private
        //System.
        //Math m=new Math(); // private
        System.out.println(Math.max(30,60)); // 60
        System.out.println(Math.min(40,10)); // 10
    }
}

class, object, instance의 상호관계


  • class
    • 객체를 모델링 하는 도구(설계도)
  • Object(객체)
    • 클래스를 통해서 선언되는 변수
    • Student(객체 자료형) st(객체변수); → 앞으로 데이터를 담을 예정이다.
      • 변수가 구체적인 실체(대상)를 가리키지 않는 상태(객체 변수)
      • 객체가 서로 구분이 되지 않은 시점
    • Instance(인스턴스, 실체)
      • 객체 생성에 의해 메모리(Heap Memory)에 만들어진 객체를 인스턴스 라고 한다.
      • st = new Student();
      • st → 인스턴스
      • 객체가 구체적인 실체를 가리키는 상태(인스턴스)
      • 객체가 서로 구분이 되는 시점
package fc.java.part3;

import fc.java.model.Student;

public class ClassObjectInstance {
    public static void main(String[] args) {
        Student st1; // st1 : object 상태
        Student st2; // st2 : object 상태
        Student st3; // st3 : object 상태

        // 지역 변수(인스턴스) = new를 통해서 Heap Memory에 저장하는 구조
        st1=new Student("홍길동","컴퓨터공학과",37,"bit@empas.com",2023110,"010-1111-1111"); // st1 : instance 상태
        st2=new Student("김길동","컴퓨터공학과",37,"bit@empas.com",2023110,"010-1111-1111"); // st2 : instance 상태
        st3=new Student("나길동","컴퓨터공학과",37,"bit@empas.com",2023110,"010-1111-1111"); // st3 : instance 상태

        System.out.println(st1.toString());
        System.out.println(st2.toString());
        System.out.println(st3.toString());
    }
}

'개발 > Java' 카테고리의 다른 글

객체 형변환  (0) 2024.01.28
상속  (1) 2024.01.28
JVM이 사용하는 메모리 영역  (0) 2024.01.28
Static  (0) 2024.01.28
배열과 클래스의 관계  (0) 2024.01.28