構造体とクラスの違いってわかりづらい

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

プログラミング言語において、しばしば構造体とクラスという言葉が使われているが、両者の違いはかなり曖昧で、言語によってはごくわずかな違いしかないという場合がある。今回は私なりに構造体とクラスの違いについて書いてみたい。

構造体は、イメージとしては一つまたは複数の変数をまとめて格納できる型と考えており、関連性の高い変数をバラバラのままでは扱いづらい時などに構造体としてまとめることで、スッキリさせることができるというものとして捉えている。

一方、クラスは、構造体と同じく変数をまとめているメンバ変数の他、その命令を受け取った時にどういう処理をするのかというメソッドから成る、プログラムのパーツの設計図として捉えている。

従って、単に複数のデータをまとめた構造として扱うなら構造体、そうではなくてプログラムのパーツの設計図として扱うならクラスとしてみている。

とはいえ、これは建前上のものが強く、実際の処理において、構造体とクラスの違いが曖昧な場合が多い。

SwiftやC++においては、実質的に構造体とクラスはデフォルトのアクセス識別子が違うのみというほど、実質的にほぼ同じものとして扱われてる。

一方、C#では、構造体はスタック領域で保持するため軽量なデータ構造として扱われるが、クラスは比較的大きなデータを扱うためヒープ領域に格納される。

また、Javaでは構造体の概念がなく、クラスで代用する。

構造体とクラスは言語によってその定義が異なることもあり、かなり曖昧なので、是非とも言語仕様には気をつけたい。

タイトルとURLをコピーしました