강의

멘토링

로드맵

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của poolha
poolha

câu hỏi đã được viết

Thực chiến Java của Kim Young-han - Trung cấp phần 1

Sử dụng lớp lồng nhau tĩnh

private 인데 static 을 붙인이유

Viết

·

319

·

Đã chỉnh sửa

0

강사님 답변을 부탁드려봅니다

 

왜 private인데 static 을 붙여뒀는지 알수있을까요?

어차피 NetworkMessage클래스를 Network클래스 안에서만 쓰려고 private 을 붙여뒀는데 왜 static 을 붙여둔건가요?

 

public class Network {

    public void sendMessage(String text) {
        NetworkMessage networkMessage = new NetworkMessage(text);
        networkMessage.print();
    }

    private static class NetworkMessage {

        private String content;

        public NetworkMessage(String content) {
            this.content = content;
        }

        public void print() {
            System.out.println(content);
        }
    }

}
java객체지향

Quiz

51% người trả lời sai. Hãy thử ngay!

Điểm khác biệt quan trọng nhất giữa lớp lồng nhau tĩnh và lớp bên trong là gì?

Sử dụng từ khóa static

Liên kết với thực thể lớp ngoài

Khả năng truy cập thành viên private

Tách file hay không

Câu trả lời 2

0

안녕하세요. 비공식 서포터즈 임형준입니다.
NetworkMessage가 클래스라고 생각이 들어 조금 헷갈리실 수 있었을 거 같습니다. 이걸 메서드라고 생각해볼까요?
보통 메서드를 작성할 때, 인스턴스 변수를 사용할 때 static으로 선언하지 않고, 반대로 인스턴스 변수를 사용하지 않을 때 static으로 선언합니다. 즉, 상태를 가지고 있지 않기 때문에 모든 객체들이 똑같이 행동할 수 있어 static으로 효율을 높입니다.

 

마찬가지로 이 Network 클래스에서의 인스턴스 변수가 없고, NetworkMessage에서 사용하지도 않기 때문에 static으로 선언했다고 볼 수 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 플하님 질문에 대한 답변을 드리겠습니다.

Network 클래스 내에서 NetworkMessage를 사용하실 때, static 키워드를 붙이는 이유는 여러 가지가 있습니다.

  1. 독립적 사용: 정적 중첩 클래스(static nested class)는 외부 클래스의 인스턴스와 독립적으로 존재할 수 있습니다. 따라서, Network 클래스의 인스턴스 없이도 NetworkMessage의 인스턴스를 생성할 수 있게 됩니다. 이는 외부 클래스의 인스턴스를 만들 필요 없이 중첩 클래스를 사용하고 싶을 때 유용합니다.

  2. 캡슐화: 접근 제어자인 private로 설정함으로써 Network 클래스 밖에서는 NetworkMessage 클래스에 접근할 수 없습니다. 이처럼 Network 클래스 내에서만 사용되는 클래스를 보호하는 용도로 사용됩니다.

  3. 메모리 사용 효율: 외부 클래스의 인스턴스가 필요 없어서 불필요한 메모리 사용을 줄일 수 있습니다. 예를 들어, 단순히 어떤 로직을 모듈화하거나, 데이터 구조로서 정의할 때 외부 클래스의 맥락을 필요로 하지 않는 경우 적합합니다.

  4. 명확성: 코드가 커질수록 더 복잡해지는 의존성을 줄이며, 코드를 명확하게 구성하는 데 도움이 됩니다. 내부 클래스와 이를 사용하는 코드 간의 관계를 보다 명확히 할 수 있습니다.

위 코드에서 NetworkMessage를 정적 클래스(static class)로 선언하여, Network 클래스의 인스턴스와 관련 없이 그 기능만 독립적으로 사용할 수 있도록 한 것입니다. 따라서, NetworkMessageNetwork의 인스턴스 없이도 생성 가능하기에 static이 사용되었습니다.

관련된 내용을 좀 더 자세히 이해하고 싶으시면 아래 링크들을 참고하시기를 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của poolha
poolha

câu hỏi đã được viết

Đặt câu hỏi