【ちゅうしょうか】

抽象化 とは?

💡 「中身を知らなくても使える」を実現する魔法
📌 このページのポイント
抽象化(Abstraction) 高レベルインターフェース drive() 👤 利用者 抽象化の壁 内部の複雑さを隠蔽 エンジン制御 startEngine() トランスミッション shiftGear() 燃料噴射 injectFuel() 点火系 冷却系 ギア比計算 センサー 噴射量制御 シンプルなAPIで複雑な内部実装を隠す = 抽象化
抽象化の考え方
ひよこ ひよこ

抽象化ってどういうことなの?

ペンギン先生 ペンギン先生

車の運転を思い浮かべてみて。ハンドルを回せば曲がるし、アクセルを踏めば加速する。でもエンジンの燃焼の仕組みやギアの切り替え方法なんて知らなくても運転できるよね。プログラミングの抽象化もこれと同じで、複雑な処理を隠して「使う人に必要な操作だけ」を見せるんだよ。

ひよこ ひよこ

具体的にプログラミングではどう使うの?

ペンギン先生 ペンギン先生

たとえばsendEmail(to, subject, body)という関数を作れば、使う側はSMTPの接続手順や文字エンコーディングの処理を知らなくてもメールを送れるよね。中身がどう変わっても、関数名と引数が同じなら使う側は修正不要。これが抽象化の力だよ。

ひよこ ひよこ

抽象化で気をつけることってある?

ペンギン先生 ペンギン先生

「漏れのある抽象化(Leaky Abstraction)」という有名な罠があるよ。たとえばORMSQLを抽象化しても、パフォーマンスが出ないときは結局SQLの知識が必要になる。完璧な抽象化は存在しないから、「抽象化の裏側」も理解しておくことが大事なんだ。あと抽象化しすぎて階層が深くなりすぎると、コードを追うのが逆に大変になるから要注意だよ。

ひよこ ひよこ

ちょうどいい抽象化のレベルってどうやって判断するの?

ペンギン先生 ペンギン先生

Rule of Threeという考え方があって、「3回同じパターンが出てきたら抽象化を検討する」というものだよ。1回目は直接書く、2回目もまだコピーでOK、3回目で初めて共通化する。早すぎる抽象化(Premature Abstraction)は、後から要件が変わったとき無駄な抽象層が足かせになるんだ。経験を積むと「この部分は将来変わりそうだな」という嗅覚が身についてくるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「抽象化」って出てきたら「複雑な詳細を隠して必要な部分だけ見せるようにする設計の考え方だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「abstraction」 = 抽出・抽象
💬 abstractは「引き離す」が語源。具体的な詳細から本質を引き離して取り出すイメージだよ
← 用語集にもどる