Java - 클래스(정적)필드와 메소드

민찬홍·2025년 6월 3일

Java

목록 보기
31/31
post-thumbnail

취업 후 처음 적는 블로그인 것 같다.. 취업 성공을 한 뒤 반년정도는 SQLD 자격증을 취득한 것 외에 회사 생활에 적응하느라 개인 공부는 진행하지 못했다.. 정말 반성해야된다. 회사 업무를 하면서 코파일럿, AWS Q developer를 통해 코딩에 많은 도움을 받지만, 그래도 정말 기본기가 중요한 것을 많이 느낀다. 기본을 모르는 상태에서 그대로 적용하고 구동된다고 좋아하는 개발자가 되기는 싫다.그렇다고 학부시절부터 배워온 Java를 모르는건 아니지만, 막상 개념을 완벽히 전부 다 정리했냐라고 묻는다면 그것도 아니다. 따라서 오늘부터 다시 Java 강의를 들으며 언어에 대한 학습부터 AWS Developer Associate 공부까지 진행하려고 한다.


☕️ YalcoChicken.java

public class YalcoChicken {

    //  ⭐️ 클래스/정적 필드와 메소드들 : 본사의 정보와 기능
    //  인스턴스마다 따로 갖고 있을 필요가 없는 것들에 사용
    static String brand = "얄코치킨";
    static String contact () {
        //  ⚠️ 정적 메소드에서는 인스턴스 프로퍼티 사용 불가
        //  System.out.println(name);

        return "%s입니다. 무엇을 도와드릴까요?".formatted(brand);
    }

    int no;
    String name;

    YalcoChicken(int no, String name) {
        this.no = no;
        this.name = name;
    }

    String intro () {
        //  💡 인스턴스 메소드에서는 정적 프로퍼티 사용 가능
        return "안녕하세요, %s %d호 %s점입니다."
                .formatted(brand, no, name);
    }
}

☕️ Main.java

		//  💡 클래스 필드와 메소드는 인스턴스를 생성하지 않고 사용
        String ycBrand = YalcoChicken.brand;
        String ycContact = YalcoChicken.contact();

        // ⚠️ 인스턴스 메소드는 불가
        //  String ycName = YalcoChicken.name;
        //  String ycIntro = YalcoChicken.intro();

        YalcoChicken store1 = new YalcoChicken(3, "판교");
        String st1Intro = store1.intro();

        //  인스턴스에서는 클래스의 필드와 메소드 사용 가능
        //  ⚠️ 편의상 기능일 뿐, 권장하지 않음 (혼란 초래. IDE에서 자동완성 안 됨 주목)
        String st1Brand = store1.brand;
        String st1Contact = store1.contact();

static 이 붙으면 매장마다 달라지는게 아니라 본사의 정보, 즉 바뀌지 않는 정보라고 보면 된다. 또한 인스턴스를 생성하지 않고 사용이 가능한데, 이는 매장을 만들지 않고 본사 그대로 사용하는 느낌이라고 보면 된다.

매장 번호 자동 생성

기존에는 매장 번호, 즉 매장을 새로 생성할때 (1,"판교") 이렇게 숫자를 직접 넣어줬어야 했지만, static을 사용하면 간단하게 숫자 생성이 가능하다.

☕️ YalcoChicken.java

public class YalcoChicken {

    static String brand = "얄코치킨";
    static String contact () {
        return "%s입니다. 무엇을 도와드릴까요?".formatted(brand);
    }
    static int lastNo = 0; // ⭐️

    int no;
    //int no = ++lastNo; // 이렇게 해도 됨

    String name;

    YalcoChicken(String name) {
        // 클래스 변수를 활용하여 생성마다 새 번호 부여 (또는 위처럼)
        no = ++lastNo;
        this.name = name;
    }

    String intro () {
        return "안녕하세요, %s %d호 %s호점입니다." // 🔴
                .formatted(brand, no, name);
    }
}

☕️ Main.java

		YalcoChicken store1 = new YalcoChicken("판교");
        YalcoChicken store2 = new YalcoChicken("강남");
        YalcoChicken store3 = new YalcoChicken("제주");

생성자가 생성될 때 static 변수의 값을 늘려주면 된다.

이렇게 static을 사용하면 static값은 메모리에서 한 공간만 차지하고 인스턴스들이 생성될때 그것들을 공통적으로 바라보게 할 수 있다.

profile
백엔드 개발자를 꿈꿉니다

0개의 댓글