반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

웹풀스택 공부 중

15 - 3. Java - Static 본문

웹개발/Java

15 - 3. Java - Static

lukeit 2024. 11. 4. 13:09

Static: 인스턴스화 없이 바로 사용 가능

  • 객체를 만들지 않고도 사용할 수 있는 Field, Method, Class 이다

    • 정적 Field: 이것은 Static Method에서 바로 사용이 가능하다

      • static을 사용할때 주로 final 을 같이 쓴다
        • 값이 바뀌는걸 방어한다
        • public 도 같이 사용한다
          • 어차피 넘기기 위한 용도이기에…
          • 비밀스럽게 Static Method에서만 사용하고 싶을땐 private을 붙여도 상관은 ㅇ
    • 정적 Method: 속한 클래스의 인스턴스 없이 사용 가능한 메서드이다

      • 유틸리티 관련 메서드를 만드는데 유용하게 사용된다

      • Parameter만 받아서 사용하는 Method는 Static으로 사용하는게 좋다

        • Field가 없는 Method를 뜻하는거다
          • 어떤곳에도 의존하지 않기에 객체를 만들 필요가 없다!
        @RequiredArgsConstructor
        public final class Member {
        
          // 모든 Member는 한국대에 속한다
          public static String school = "한국대";
          ...
        
        
    // main
            Member member = new Member(1,"Aron");
            // 아래는 불가능
            System.out.println(member.school);
            // 아래가 가능하다 <- Static이기 때문에
            System.out.println(Member.school);
    ```

- 정적 Class
    - 인스턴시 없이 사용 가능한 Nested Class이다
        - 상위 클래스를 인스턴스화 해야하니 `new new` 를 통해 두번 인스턴스화를 했어야하나, 정적 Class라면 그럴필요가 없다
        - 정적 Class는 Inner Class만 정적으로 만들어준다
            - 그 Inner Class를 가진 Class는 `final` 로 만들어주는게 좋다
    - 왜 사용하는가?
        - 클래스안에 Inner Class 안에 Static Method가 있을때 Inner Class가 아니더라도 그 Static Method를 사용할 수 있다
        - Inner Class를 Static으로 했을때 Static field에 대한 접근을 줄 수 있다
    - Static Class는 딱히 쓸일이 많지 않긴 하다

        ```java
        // 비교해보기
        // 정적 Class가 아닐때 인스턴스화:
                 OuterClass.InnerClass innerObject
                    = new OuterClass().new InnerClass();

        // 정적 Class
                OuterClass.NestedStaticClass printer
                    = new OuterClass.NestedStaticClass();
        ```

    - 클래스 안에 클래스인 Inner or Nested Class를 뜻한다

        ```java
        public static class Item{...}

        // main

        Member.Item item = new Member.Item();
        ```

    - 계층을 만들 수도 있다!

        ```java
        public static class Item{
            public static void current(){
                System.out.println("필통");
            }
        }

        // main
        Member.Item item = new Member.Item();
        Member.Item.current();
        ```
반응형