나는 객체의 개념을 이해하고 Java 프로그래머로서 OO 패러다임은 실제로 자연스럽게 나에게 온다고 생각합니다.
그러나 최근에 나는 생각하는 것을 발견했다.
잠깐, 정적 클래스를 사용하는 것보다 적절한 객체를 사용하는 것의 실질적인 이점은 무엇입니까?
객체를 사용하면 두 가지 이점을 생각할 수 있습니다 (둘 다 중요하고 강력합니다).
다형성 : 런타임 중에 기능을 동적으로 유연하게 교환 할 수 있습니다. 또한 시스템에 새로운 기능 '부품'및 대안을 쉽게 추가 할 수 있습니다. 예를 들어 객체
Car
로 작업하도록 설계된 클래스Engine
가 있고 Car가 사용할 수있는 시스템에 새 엔진을 추가하려는 경우 새Engine
하위 클래스를 만들고이 클래스의 객체를 객체에 전달할Car
필요없이 간단히 에 대해 변경하십시오Car
. 그리고 런타임 중에 그렇게 할 수 있습니다.'주변 기능 전달'가능 : 시스템 주위의 객체를 동적으로 전달할 수 있습니다.
그러나 정적 클래스보다 객체에 더 많은 이점이 있습니까?
종종 시스템에 새로운 '부품'을 추가 할 때 새로운 클래스를 생성하고 객체를 인스턴스화하여 추가합니다.
그러나 최근에 멈추고 생각했을 때 정적 클래스가 일반적으로 객체를 사용하는 많은 장소에서 객체와 동일하게 작동한다는 것을 깨달았습니다.
예를 들어, 저장 /로드 파일 메커니즘을 앱에 추가하려고합니다.
객체를 사용하면 호출 코드 줄은 다음과 같습니다. Thing thing = fileLoader.load(file);
정적 클래스를 사용하면 다음과 같습니다. Thing thing = FileLoader.load(file);
차이점이 뭐야?
평범한 정적 클래스가 똑같이 작동 할 때 객체를 인스턴스화 해야하는 이유를 생각할 수없는 경우가 종종 있습니다. 그러나 OO 시스템에서 정적 클래스는 매우 드 rare니다. 그래서 나는 뭔가를 놓치고 있어야합니다.
내가 나열한 두 가지 이외의 다른 개체에 더 많은 이점이 있습니까? 설명 해주십시오.
편집 : 명확히하기 위해. 기능을 바꾸거나 데이터를 전달할 때 객체가 매우 유용하다는 것을 알았습니다. 예를 들어 멜로디를 구성하는 앱을 작성했습니다. MelodyGenerator
멜로디를 다르게 만드는 여러 서브 클래스가 있었으며이 클래스의 객체는 서로 바뀌 었습니다 (전략 패턴).
멜로디도 지나가는 것이 유용하기 때문에 객체였습니다. 화음과 음계도 마찬가지였습니다.
그러나 시스템의 '정적'부분은 어떻습니까? 예를 들어 '파일 저장'메커니즘입니다. 정적 클래스가 아닌 객체로 구현 해야하는 이유는 무엇입니까?
FileLoader
소켓에서 읽은 것으로 교체해야 할 때 어떻게됩니까 ? 아니면 테스트를위한 모의? 아니면 zip 파일을 여는 것입니까?
System.Math
.NET에서 정적 클래스로 훨씬 더 의미가있는 예입니다. 스왑하거나 조롱 할 필요가 없으며 논리적으로 인스턴스의 일부로 만들 수있는 작업이 없습니다. 나는 당신의 '저장'예가 그 법안에 맞지 않다고 생각합니다.
Thing
입니까?