클래스와 구조체의 차이점 클래스와 구조체의 차이점을 이해하기 전에

Anonim

클래스와 구조체의 차이점을 이해하기 전에 해당 클래스와 관련된 몇 가지 기본 개념을 알아야합니다. 개념을 이해하지 못하면 두 개념의 차이점을 이해하기 어렵습니다.

클래스와 객체 란 무엇인가:

이들은 객체 지향 프로그래밍과 관련된 두 가지 중요한 개념이며, 함수와 다른 함수로 전달되는 데이터를 프레임 화하기위한 기초를 형성합니다. 더 나은 이해를 위해 실제 사례와 관련시킬 수 있습니다. 클래스는 상점으로 간주 될 수 있으며 객체는 식료품 점, 문구류, 과일 등과 같은 개별적인 특정 상점이 될 수 있습니다. 모든 객체는 주류 - 상점 -의 공통 속성을 공유하며, 객체는 특정 디자인, 조명 등과 같은 고유 한 속성을 가질 수 있습니다. 객체를 통해 실제로 클래스를 사용할 수 있습니다. 그들은 클래스의 인스턴스를 형성합니다.

클래스

클래스 저장소의 구문 { public string things;

공공 문자열 디자인;

}

객체의 구문

상점 식료품 = 새 상점 ();

상점 문구 = 새로운 상점 ();

구조체 란 무엇입니까?

Struct는 데이터 만 포함하므로 Struct 객체를 통해 개별 데이터 요구 사항을 구성하는 데 유용합니다. 클래스와 달리 함수가 부족합니다. 구문은 다음과 같습니다.

struct grocery_entrance {

char entrance_name [50];

int 입구 크기;

} 식료품 상임.

모든 상점은 개별 이름과 크기의 구조 '입구'를 사용할 수 있습니다.

상속이란 무엇입니까?

그것은 아들이 아버지의 소유물을 물려받는 것과 유사하며, 아들은 자신의 다른 소유물을 추가 할 수 있습니다. 클래스는 기본 클래스이거나 파생 클래스 일 수 있습니다.이 클래스에서는 후자를 구성하는 기본 클래스로 사용할 수 있습니다. 파생 클래스는 기본 클래스에서 가져 오는 것과는 별도로 다른 속성을 거의 추가하지 않습니다. 위의 예를 고려해 보면 식료품 점은 XYZ 식료품 점과 같은 특정 식료품 점으로 파생 될 수 있습니다.

이제 우리는 기본 개념을 잘 알고 있으므로 Class와 Struct의 실제 차이점을 살펴볼 수 있습니다.

그들은 어떻게 다른가요?

재사용 가능성:

  • 클래스는 기본 프레임 워크를 형성하기 때문에 재사용 할 수 있습니다. 그러나 Structs는 특정 속성을 가진 개별 요소이므로 재사용 할 수 없습니다. 예를 들어, 식료품 점 클래스는 모든 유형의 식료품 점에 사용할 수 있지만 구조 식 그룹은 그 유형에만 해당되며 다른 클래스에서 다시 사용할 필요가 없습니다. 공개:
  • 클래스의 모든 함수는 객체에서 공개적으로 사용할 수 있습니다.예를 들어 Class 'store'아래에 'things'라는 함수가 있습니다. 'things'함수는 '식료품 점', '문구점'등과 같이 모든 객체에서 볼 수 있습니다. 구조체의 데이터는 다른 구조체에 표시되지 않고 표시되지 않으므로 이러한 가시성은 Structs에서는 사용할 수 없습니다. 일을 분명히하기 위해 '식료품 판매'의 데이터가 모든 다른 상점에 공개적으로 표시되지 않는다고 말할 수 있습니다. 참조로 전달 및 값으로 전달:
  • 참조로 전달은 메모리 위치 만 보내고 실제 데이터는 전달하지 않습니다. 즉, 값이 변경 될 때마다 변경 사항이 해당 기능에 반영됩니다. 값을 통한 전달은 함수에 값을 전송하는 것입니다. 이 경우 값이 전송 된 후 변경된 값은 함수에 반영되지 않습니다. 클래스는 참조에 의한 패스를 사용하고, Struct는 패스 값을 사용합니다. 상속:
  • 클래스는 하위 클래스를 형성하기 위해 더 상속 될 수 있지만 Structs는 상속을 이용할 수 없습니다. 예를 들어, 클래스 저장소는 해당 기능을 하위 클래스 '식료품 점'에 제공합니다. 그러나 Struct '식료품 점'은 어떤 기능도 상속받을 수 없습니다. 하위 구조체와 같은 개념이 없다고 말할 수 있습니다. 기본 가시성:
  • 클래스의 모든 멤버는 기본적으로 개인 엔터티로 유지되는 반면, Struct 멤버는 기본적으로 공용 엔터티로 유지됩니다. 빈 클래스 및 구조체:
  • 클래스의 크기는 비어있는 경우에도 1 바이트 크기를 사용하지만 구조체는 비어있는 경우 메모리를 사용하지 않습니다. 이것은 빈 구조체의 크기가 0 바이트와 같다고 말할 수 있음을 의미합니다. Garbage collection:
  • Classes에서는 가비지 콜렉션이 참조로 전달을 사용하기 때문에 가능합니다. 따라서 데이터가 저장된 한 위치에서 정리를 수행하는 것이 더 쉽습니다. 반면에 값으로 전달을 사용하고 데이터가 다른 위치에 분산되어 있기 때문에 가비지 수집은 Struct에서는 불가능합니다. 메모리 관리:
  • Class는 가비지 콜렉션을 허용하므로 메모리 관리도 효과적입니다. 그러나 Structs에서는 그다지 효과적이지 않습니다. 생성자:
  • 생성자는 일반적으로 클래스를 특정 값으로 초기화합니다. 우리는 값으로 초기화 된 것과 같은 것을 볼 수 있습니다. 새 클래스를 만들어야하는 경우 해당 인스턴스에 대한 메모리를 할당하기 위해 생성자가 호출됩니다. 생성자를 호출하는 동안 값을 인수로 전달할 수도 있습니다. 지금 우리의 실제 토론에와 봅시다. 클래스는 인수가 있거나없는 모든 유형의 생성자를 허용하지만 struct는 인수가있는 생성자 만 허용합니다. 이자형. 파라미터 화 된 생성자. 소멸자:
  • 소멸자는 클래스의 인스턴스를 삭제해야 할 때마다 호출됩니다. 소멸자는 해당 인스턴스를 삭제하고 메모리를 비 웁니다. 클래스는 소멸자를 사용할 수 있지만 구조체는 소멸자를 사용할 수 없습니다. 멤버 변수 초기화:
  • 클래스에서는 멤버 변수를 직접 초기화 할 수 있습니다. 그러한 초기화는 Structs에서는 불가능합니다. 객체 생성:
  • 클래스에서 객체를 생성하는 일반적인 구문은 다음과 같습니다. Demo obj = new Demo ();

이는 클래스의 객체를 생성하는 동안 'new'키워드를 사용해야 함을 의미합니다.Structs의 객체를 만들 때 필요하지 않습니다. 구문을 살펴보십시오.

Demo obj;

'new'라는 키워드 없이도 완벽하게 작동합니다.

클래스 사용시기 및 구조 사용시기 클래스는 데이터와 함수를 함께 전달할 때보다 유연하므로 사용되는 객체가 복잡하고 커질 때 클래스를 사용할 수 있습니다. 이 예에서 Mall은 'store'클래스를 사용하여 더 나은 방식으로 시스템을 표현할 수 있습니다. 그러나 구조체는 클래스보다 상대적으로 효과가 낮기 때문에 더 작은 객체로 제한됩니다. 따라서 자신의 상점을 디자인하면 Structs가 더 나은 선택입니다.

구조체를 클래스로 변환하는 법?

구조체를 클래스로 변환하기 위해 '복싱'및 '언 박싱'이라는 용어를 들었을 수도 있고 그 반대의 경우도있을 수 있습니다. 이러한 전환 과정에서 우리를 도울 수있는 효과적인 프로세스이지만주의해서 처리해야합니다. 이것이 메모리 위치에 직접 영향을 미치기 때문에 우리 시스템의 성능에 큰 영향을 미칩니다. 또한 가비지 수집 프로세스에 영향을 미치고 전반적인 시스템 비효율을 초래합니다. 따라서 필요할 때만 이러한 전환을 사용하십시오.

앞에서 언급 한 표 형식의 차이점을 살펴 보겠습니다. S. 1 재사용 가능성

완전히 재사용 가능

재사용 불가

2 가시성 < 클래스의 모든 기능을 해당 객체에서 볼 수 있음 Struct의 객체 데이터가 동일한 Struct의 다른 객체에서 보이지 않음
참조로 전달 및 값으로 전달 > 참조로 패스 사용
값을 기준으로 패스 사용 4 상속 클래스의 함수는 하위 클래스에 상속 될 수 있습니다. 상속 허용 안 함
5 기본 공개 설정 클래스의 모든 멤버는 기본적으로 private 임 Struct의 모든 멤버는 기본적으로 public 임
6 크기가 비어있을 때 크기 빈 클래스의 크기는 1 Byte입니다. 빈 구조체의 크기는 0입니다. Bytes 7
가비지 수집 참조로 전달을 사용하므로 가비지 수집이 가능합니다 메모리 관리 가비지 수집 프로세스의 용이성은 효과적인 메모리 관리에 도움이됩니다. 가비지 수집의 부족으로 인해 값이 작아집니다. 메모리 관리
생성자 매개 변수 유무와 같은 모든 유형의 생성자 허용 매개 변수화 된 생성자 만 허용 10
소멸자 사용 가능 멤버 변수를 직접 초기화 할 수 없음
11 멤버 변수 초기화 멤버 변수의 직접 초기화 허용 < 개체 생성 개체 생성 중에 'new'키워드를 사용해야합니다.
개체 생성 중에 'new'키워드를 사용하는 것은 선택 사항입니다. 13 사용시기는? 상속이 필요한 크고 복잡한 객체의 경우보다 우수합니다.
상속이 덜 중요한 작고 간단한 객체의 경우 더 좋습니다. 클래스와 구조체의 차이점을 거의 모두 다뤘습니다. 누락 된 점이 있으면 알려주십시오. 함께 배우고 그 지식을 최대한 활용합시다!