OOP 캡슐화 일명 Wrap it Up

Last time when we talked about objects, I mentioned that an object can be considered as a bundle of properties and behaviors. This time, we're going to take that idea even further and look at the concept of encapsulation.



캡슐화



실제 또는 가상의 객체, 물리적 또는 코드를 생각할 때. 우리가 해야 할 첫 번째 일은 그것을 나머지 존재로부터 분리하는 것입니다. 내 말은, 객체의 개념을 생성하기 위해 스마트폰이라고 합시다. 동시에 "스마트폰이 아님"이라는 개념을 생성한다는 것입니다. 스마트폰의 속성과 동작을 가진 개체와 기본적으로 다른 모든 개체 사이에는 구분이 있습니다.

이것은 개체가 속성과 동작의 그룹이라는 것을 말하는 또 다른 방법일 뿐이지만 초점은 그룹화 프로세스에 있습니다.

캡슐화에 대한 사전의 컴퓨터가 아닌 정의는 "무언가를 캡슐에 넣거나 마치 캡슐에 넣는 것과 같은 동작"입니다. 분명히 그것은 정확히 우리가 원하는 것이 아니지만 생각해 보면 생각보다 훨씬 더 가깝습니다. 우리는 말 그대로 캡슐을 사용하지 않을 수도 있지만 확실히 사물을 둘러싸고 있습니다.

이 경우 "캡슐"은 개체 자체의 개념입니다. 개체를 속성과 동작을 포함하는 캡슐로 생각할 수 있습니다. 캡슐화되는 속성과 동작은 객체를 정의합니다.



데이터 숨기기





개체의 속성과 관련하여 일반적으로 속성 값과 직접 상호 작용하는 것은 좋지 않은 디자인으로 간주됩니다. 뻔하지 않을 수 있지만 이것도 캡슐화 개념의 일부입니다.

예를 들어 트리를 개체로 사용하겠습니다. 나무는 종, 키, 나이 등과 같은 속성을 가지고 있습니다. 이제 나무는 분명히 그러한 속성을 가지고 있지만 사람(별도의 개체)으로서 어떻게 이러한 속성에 액세스할 수 있습니까? 우리는 이러한 것들을 알 수 없으며 이러한 속성에 액세스하기 위해 무언가를 해야 합니다(보고, 측정 등).

또한 무언가를 하는 것은 행동에 가깝고 코드의 경우 방법에 가깝다는 점을 기억하십시오. 따라서 객체 속성 값을 읽거나 변경하려면 메서드를 사용해야 합니다.


class Tree

   def initialize( tree_params ) #tree_params is a hash
      @height = tree_params[:height]
      @species = tree_params[:height]
      @age = tree_params[:height]
   end


end


이것은 현실 세계에서도 의미가 있습니다. 책에 있는 정보만 알 수 있는 것이 아니라 읽어야 합니다. 자동차가 무슨 색인지 자동으로 알 수 있는 것이 아니라 직접 봐야 합니다!

게터와 세터



현실 세계에는 개체와 상호 작용할 때 취할 수 있는 복잡한 동작과 작업이 많이 있습니다. 예를 들어 이전 나무의 나이를 알고 싶다면 나무를 자르고 나이테를 세어야 할 수도 있습니다. 또는 몸통 지름을 측정하고 과학을 할 수 있습니다.

코드의 메서드도 매우 복잡할 수 있지만 다른 개체의 속성에 액세스할 때 우리는 물리적 세계보다 훨씬 더 많은 권한을 가지고 있습니다.

객체에 속성에 대해 물어보거나 변경하라고 말할 수 있습니다. 나무에 올라가서 나이를 물은 다음 116살이라는 것을 알게 되는 것과 같습니다. 또는 나무에게 야자나무가 되라고 말하는 것과 같을 것입니다.


class Tree

   def initialize( tree_params ) #tree_params is a hash
      @height = tree_params[:height]
      @species = tree_params[:height]
      @age = tree_params[:height]
   end

   def get_age
     return @age
   end

   def set_age(age)
      @age = age
   end

   def set_species(species)
     @species = species
   end


# I used get_ and set_ in the method declarations to help
# illustrate getters v setters. 

end


코드에서 이러한 메서드는 매우 일반적이며 캡슐화의 중요한 부분입니다. 개체의 속성에 대해 묻는 메서드를 "게터"(개체에서 값을 가져오기 때문에)라고 하고 해당 값을 변경하도록 지시하는 메서드(일반적으로 대체 값을 직접 제공하여)를 "세터"라고 합니다.

캡슐화 결론



getter 및 setter를 통해 속성(및 내부 동작)에 대한 액세스를 제한하고 더 복잡한 동작으로 결합하여 유용하고 예측 가능하게 동작하는 개체 모델을 만들 수 있습니다.

거기에서 재미를 시작할 수 있습니다

좋은 웹페이지 즐겨찾기