이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 15843|회답: 0

[출처] 정적 방법 및 싱글톤 패턴 분석

[링크 복사]
게시됨 2019. 10. 10. 오후 6:15:05 | | |
프로그래밍에서는 종종 혼란스러워요. 어떤 함수는 싱글톤으로 풀리고, 어떤 함수는 정적 방법으로 해결되는데, 정적 메서드와 싱글톤의 원리와 사용 시나리오는 무엇인가요? 오늘 이 문제를 분명히 합시다.

1. 먼저 정적 방법과 비정적 방법의 차이를 살펴보겠습니다.

        많은 프로그래머들은 정적 메서드가 먼저 로드되고, 비정적 메서드는 나중에 로드되며, 정적 메서드는 항상 메모리에 존재하고 비정적 메서드는 존재하지 않는다는 점을 이해하고 있습니다. 따라서 비정적 방법을 사용하는 것이 권장됩니다. 우선, 이 이해가 잘못되었다고 강조하는 것은 잘못된 일입니다.

        우선, 메모리에서 분석해 보겠습니다. 애플리케이션이 초기화될 때 CLR(CLR은 공통 언어 런타임)은 Java 가상 머신과 마찬가지로 자원 관리(메모리 할당 및 가비지 컬렉션 등)를 담당하며 애플리케이션과 기본 운영 체제 간의 필요한 분리를 보장합니다. CLR은 두 가지 다른 번역명을 가지고 있습니다: 공통 언어 런타임(Common Language Runtime)과 공통 언어 런타임(Common Language Runtime)입니다. 각 프로세스에 대해 관리 힙(managed heap)이라는 가용 공간에서 주소 공간을 할당합니다. 관리되는 힙은 여러 영역으로 나뉘며, 그중 가장 중요한 것은 가비지 컬렉션 힙(GC 힙)과 로더 힙(로더 힙)으로, 로더 힙은 객체 인스턴스를 저장하는 데 사용되며 GC가 관리합니다. Loader Heap이 MethodTable 테이블을 통해 저장하는 가장 중요한 정보는 기본 타입, 정적 필드, 구현 인터페이스, 모든 메서드와 같은 메타데이터 관련 정보입니다. 로더 힙은 GC 제어를 받아들이지 않으며, 그 수명 주기는 생성부터 파괴까지입니다. 즉, 클래스가 로드되면 이 클래스의 정적 및 비정적 메서드 모두 Load Heap의 MethodTab 테이블에 GC 제어 없이 저장되며, 첫 로드 시 모두 메모리에 상주합니다.

        정적 방법과 비정적 방법의 차이점은 무엇인가요? 차이점은 객체를 생성할 때 정적 메서드는 복사본만 가지는 반면, 비고정 메서드는 새로운 객체마다 GC 힙에 해당 인스턴스 정보를 복사하고, 동시에 새 객체를 스택에 올립니다. 스택 포인터가 가리키는 주소는 방금 GC 힙에 복사된 메모리 주소입니다. 따라서 메서드 호출 속도 측면에서 정적 메서드가 더 빠릅니다. 왜냐하면 비정적 메서드는 인스턴스화되고 메모리를 할당해야 하기 때문입니다.

프로그래밍 역사에서 볼 때, 초기 구조화 프로그래밍의 거의 모든 방법들은 정적인 방법이었고, 인스턴스화 방법의 도입은 객체지향 프로그래밍의 문제였기 때문에, 인스턴스화 방법은 실행 효율성과 메모리 문제를 해결하기 위한 것이 아니었습니다. 개발을 더 패턴화하고 객체지향적으로 만드는 것입니다.

        위 분석을 통해 결론을 내릴 수 있습니다: 1. 정적 방법과 비정적 방법은 해법의 구분입니다. 2. 상속, 다형성, 또는 메서드가 클래스의 객체와 무관할 경우, 도구 클래스와 같은 정적 메서드를 선택해야 합니다.        

2. 싱글톤 모드와 정적 방법의 차이점은 무엇인가요?

        때때로 엔지니어링에서 런타임에 로드되는 일부 구성 속성 같은 정보를 유지해야 하며, 이는 애플리케이션 수명 전반에 걸쳐 존재해야 하며 공개되어 있으므로 한 개의 복사본만 필요합니다. 현재는 이 데이터를 유지하기 위해 싱글턴 또는 정적 방법을 고려할 예정이지만, 이 데이터는 객체지향 방식으로 얻어져 싱글턴을 사용할 것입니다.

        첫째, 정적 메서드는 클래스 기반이고 싱글톤은 객체 기반입니다. 해상도 패턴이 객체 기반이라면 싱글톤을 사용하고, 그렇지 않으면 정적 방식을 사용하세요. 예를 들어, 싱글톤을 사용하려면 클래스를 상속하고, 인터페이스를 구현하며, 초기화 지연, 부모 클래스 재작성 등을 해야 하고, 두 번째로 정적 메서드는 프로세스 지향, 싱글턴은 객체 지향입니다. 셋째, 정적 속성 변수는 GC에서 지우지 않으므로 싱글톤 객체는 GC에서 지우지 않으며, 정적 메서드에서 생성된 객체는 정적 메서드가 실행될 때 해제됩니다.




이전의:분산 메시징 미들웨어 실습 (Ni Wei 저) 전체 중국어 PDF
다음:Dell Latitude 5501 노트북 종료 및 자동 전원 켜기 문제 해결
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com