現在このようなクラスがあります。

class Hoge
  attr_accessor :fuga, :piyo

  def initialize
    data_create
  end

  def data_create
    data = 色々な処理{...}

    # インスタンス変数に代入
    @fuga = data[:a]
    @piyo = data[:b]
  end
end

# 使う時
hoge = Hoge.new
hoge.hufa
hoge.piyo

Hoge#datacreateは実際にはhttp経由で情報を取得してきたり、変換処理を行ったりしていて多少時間がかかってしまうものです。
そのため、インスタンスを生成する度にオーバーヘッドのコストがかかってしまいます。

Hogeクラスを使う時に必ず@fuga@piyoを使うわけではないので、初めて参照されたタイミングでデータを作るようにすればいいと思いつきました。

具体的には以下のようなコードです。

class Hoge
  @fuga = nil
  @piyo = nil

  def fuga
    data_create if @fuga.nil?

    @fuga
  end

  def piyo
    data_create if @piyo.nil?

    @piyo
  end


  def data_create
    data = 色々な処理{...}

    # インスタンス変数に代入
    @fuga = data[:a]
    @piyo = data[:b]
  end
end


# 使う時
hoge = Hoge.new
hoge.hufa
hoge.piyo

まだプログラミングの経験が浅いため、このやり方が良い方法である自信がありません。
気をつけたほうがいい部分などがあれば、教えていただけないでしょうか。

みなさんの「自分だったらこうする」というアイディアなどもドンドンお聞かせください。

また、rubyらしく工夫できる書き方などもあれば教えて下さい。
よろしくお願いします。