코딩배움일지/JAVA

Java 11일차 1(static)

karatejin 2022. 11. 24. 09:54

static = 공유(도깨비)

클래스 존재자체가 메모리 역할을 하고>?

생성을 하지 않아도 변수를 메모리에 할당 하고 있다.

정의할때부터 메모리 영역을 할당한다.

import lombok.Data;

/*
 공유영역

 */
@Data
public class Product {/*선언 되자마자*/

    private static int autoIncrement = 20220000; /*새로 만들어지지 않고 공유하는 것일뿐*/
    /*메모리 할당*/

    private int serialNumber;
    private String name;

    public Product(String name) {
        this.serialNumber = ++autoIncrement; /*생성자 안에서만 증가시키자*/
        this.name = name;
    }
}

static autoIncrement

원래 쓰던 영역에서 바뀐다.

생성자가 호출이되면 1이 증가된다.

증가한 것을  serialNumber에 대입

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

        Product product1 = new Product("아이폰14");
        Product product2 = new Product("아이폰14_Mini");

        System.out.println(product1);
        System.out.println(product2);

    }
}

static 변수 static 메소드 쓰기

 

static method는 언제든지 static 변수에 접근 생성을 하지 않더라도 쓸수 있다.


import lombok.Data;

/*
 공유영역

 */
@Data
public class Product { /*선언되자 마자*/

    private static int autoIncrement = 20220000; /*새로 만들어지지 않고 공유하는 것일뿐*/ /*메모리 할당.*/

    private int serialNumber;
    private String name;

    public Product(String name) {
        this.serialNumber = ++autoIncrement; /*생성자 안에서만 증가시키자*/
        this.name = name;
    }

    public static void print(){
        System.out.println(autoIncrement);
        //System.out.println(serialNumber); /*접근불가*/ /*애초에 있지도 않다.*/
        Product product = new Product("모니터");
        System.out.println(product.serialNumber);
    }
}

Product(serialNumber=20220001, name=아이폰14)
Product(serialNumber=20220002, name=아이폰14_Mini)
20220002
20220003
20220003
20220004
20220004
20220005