EEALL@ONCE

☕ 클래스 - static 이란? 본문

언어💻/자바☕

☕ 클래스 - static 이란?

올엣원스 2023. 10. 16. 22:55
728x90

 

 

public class Book {
    // 필드 (인스턴스 변수)
    String title;
    String author;
    int pageCount;

    // 인스턴스 메소드 - static을 붙이지 않음
    String getInfo() {
        return "이 책은 '%s'라는 제목의 책으로, 저자는 %s이며, 페이지 수는 %d쪽입니다."
                .formatted(title, author, pageCount);
    }
}

 

public class Main {
    public static void main(String[] args) {
        Book myBook = new Book();
        myBook.title = "Java Programming";
        myBook.author = "John Smith";
        myBook.pageCount = 300;

        String bookInfo = myBook.getInfo();
        System.out.println(bookInfo);
    }
}

 

 

🚩 인스턴스 메소드에는 static을 붙이지 않는 이유 : 

"static" 키워드는 Java에서 메서드나 필드를 정적으로 만들 때 사용됩니다. 정적(static) 멤버는 클래스 자체에 속하며 인스턴스와는 독립적으로 동작합니다. 

메서드에 "static" 키워드가 없는 경우, 해당 메소드는 인스턴스 메소드로 정의됩니다. 이것은 해당 메소드가 특정 인스턴스에 종속적이며, 해당 인스턴스 내의 데이터나 필드를 사용할 수 있음을 의미합니다.

따라서 코드에서 "static" 키워드를 사용하지 않는 이유는 이 메소드를 인스턴스의 상태나 데이터에 접근할 수 있도록 만들고자 하는 것입니다. 예를 들어, 'intro' 메소드에서 'no'와 'name' 필드를 사용하려면 이 메소드가 특정 인스턴스에 종속되어야 합니다. 인스턴스 메소드로 정의된 메소드는 각각의 인스턴스에 대해 고유한 값을 반환할 수 있으며, 이것이 클래스의 주요 목적 중 하나입니다.

정적(static) 메소드는 클래스 수준에서 동작하며 특정 인스턴스와는 상관없는 작업을 수행할 때 사용됩니다. 그러나 'intro' 메소드는 'no'와 'name' 필드와 관련이 있으므로 인스턴스 메소드로 정의되어야 합니다.

 

내가 이해한 static 과 instance의 개념은 이렇다.. 


예를 들어... 

직장인 이라는 class 가 있고

'나'라는 인스턴스가 있다. 

직장인은 최저시급은 받는다. <- 최저시급은 static으로 해서 인스턴스에 관계없이 지정해 줄 수 있다.

하지만, '나'는 최저시급보다 더 높은 연봉을 받는다. 

따라서 연봉은 '나'라는 인스턴스를 통해서만 지정되어야한다.. 


🚩 "정적(static)"이라는 용어는 프로그래밍에서 다양한 컨텍스트에서 사용됩니다. 여기서는 Java 프로그래밍에서 "정적"이 무엇을 의미하는지 설명하겠습니다.

1. **정적(static) 변수**:
   - 정적 변수는 클래스 수준에서 선언되며 모든 인스턴스(객체)가 공유합니다. 따라서 클래스의 모든 인스턴스가 동일한 변수 값을 공유하게 됩니다.

2. **정적(static) 메소드**:
   - 정적 메소드는 클래스 수준에 속하며 특정 인스턴스에 종속되지 않습니다. 인스턴스를 생성하지 않고도 클래스 이름을 통해 호출할 수 있습니다.

3. **정적(static) 블록**:
   - 정적 초기화 블록은 클래스가 로드될 때 실행되는 블록으로, 클래스 수준의 초기화 작업에 사용됩니다.

4. **정적(static) 상수**:
   - 상수는 변경할 수 없는 값으로 정의되며, 주로 정적(static)으로 선언됩니다. 이러한 상수는 클래스 수준에서 사용될 수 있으며 값을 변경할 수 없습니다.

"정적"은 주로 클래스 수준에서 사용되며, 특정 인스턴스와는 독립적입니다. 이것은 모든 인스턴스가 해당 정적 멤버(변수 또는 메소드)를 공유하고, 클래스의 인스턴스를 만들지 않고도 클래스 이름을 통해 액세스할 수 있음을 의미합니다. 

예를 들어, `Math` 클래스의 메소드인 `Math.max()`는 정적 메소드로, 어떠한 `Math` 클래스의 인스턴스도 생성하지 않고 사용할 수 있습니다. 또한, 상수 `Math.PI` 역시 정적 상수로 정의되어 있습니다.

728x90

'언어💻 > 자바☕' 카테고리의 다른 글

☕참조형(Reference Type)이 뭘까?  (0) 2023.10.17
☕생성자 메소드  (1) 2023.10.17
☕ 인스턴스란(객체)?  (0) 2023.10.16
☕FTP 서버에 파일을 업로드  (0) 2023.09.11
☕Calendar calendar  (0) 2023.09.05