The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2021-01-28
소프트웨어 개발

루비 3.0. Ruby와 잘 알려지지 않은 개인정보 제어 방법

The Codest

토마스 스카라덱

개발 아키텍트

루비의 가장 사랑받는 기능 중 하나는 매우 유연한 구문입니다. 개인적으로 저는 클래스와 그 속성을 정의할 수 있는 수많은 가능성 때문에 루비를 좋아하는데, 이 글에서 이 부분에 대해 설명할 것입니다.

기본 솔루션

하나의 공용 메서드와 하나의 비공개 메서드가 있는 Foo 클래스를 사용한다고 가정해 보겠습니다:

클래스 Foo
  def bar
    :awesome
  end

  private

  def baz
    :something_private
  end
end

모든 것이 훌륭합니다. 거의 모든 솔루션에서 이러한 솔루션을 볼 수 있습니다. 프로젝트. 실행 중 Foo.new.baz 를 사용하면 오류가 발생합니다. NoMethodError(#에 대해 호출된 비공개 메서드 'baz') 로 저장할 수 있습니다. 저장 형식을 변경하고 클래스 정의에 접두사로 private을 추가하려고 하면 어떻게 될까요?

클래스 Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end
end

실행 후 보시다시피 코드실제로 작동합니다! 메서드를 수행하기 전에 메서드의 가시성을 입력할 수 있는 이유는 무엇인가요? 메서드를 정의할 때 def는 메서드의 이름을 심볼로 반환하기 때문입니다. 이 표현식은 구문의 일부일 뿐만 아니라 사실상 Module 클래스에서 파생된 메서드이며 이 심볼을 인수로 취급합니다. 자세한 내용은 다음 문서를 참조하세요. 이 링크에서. 비공개로 쉽게 시작했으니 비공개 방법의 가시성을 변경해 보겠습니다.

클래스 Foo
  def bar
    :awesome
  end

  private def baz
    :something_private
  end

  public :baz
end

코드를 실행하면 어떻게 되나요?

irb(main):012:0> Foo.new.baz
=> :something_private

성공! 베이스 방법을 두 번 공개했기 때문에 공개되었습니다. 물론 모듈에도 동일한 작업이 적용됩니다.
​
잘됐네요, 하지만 어디로 갈 수 있을까요?
​
이 기능은 메서드를 정의하는 동안 메서드의 표시 여부를 자유롭게 변경하거나 메서드를 상속할 때 표시 여부를 변경할 수 있기 때문에 많은 이점을 제공합니다.

이제 별칭과 접근자의 가시성을 변경하는 측면에서 Ruby 2.7이 어떤 기능을 제공하는지 살펴보겠습니다.

클래스 Foo
  private attr_accessor :awesome_variable
end

안타깝게도 비공개 메서드에서 심볼과 attr_accessor를 기대하기 때문에 오류가 발생합니다. 코드가 nil을 반환하므로 이 메서드는 Ruby 2.7의 비공개 사용과 호환되지 않습니다. 그렇다면 옵션은 무엇일까요?

  1. 개인 키워드 아래에 attr_accessor를 사용하여 작동하도록 할 수 있습니다. 즉, 참조하려고 할 때 오류가 발생합니다. awesome_변수awesome_변수 메서드를 사용합니다.
클래스 Foo
  private

  attr_accessor :awesome_variable
end
  1. 두 번째 옵션은 다음에서 생성된 메서드에서 비공개 메서드를 실행하는 것입니다. attr_attribute이 경우 세터를 입력하는 것도 잊지 말아야 합니다.
클래스 Foo
  ATTR_ACCESSOR :awesome_변수

  private :awesome_variable, :awesome_variable=.
end

문제 attr_ * 메서드만이 장애물은 아닙니다. 비공개 별칭을 만들 때도 같은 어려움을 겪을 수 있습니다.

클래스 Foo
  개인 별칭 :bar, :awesome_bar
end

루비 3.0과 비즈니스

다행히 루비 3.0에서는 가시성 메서드가 배열을 인수로 사용할 수 있고 메서드 별칭인 attr_ *가 정의된 메서드의 이름으로 배열을 재설정할 수 있게 되어 큰 변화가 도입되었습니다. 자세히 읽어보세요. 여기.

이제 최신 euba의 몇 가지 예를 살펴보고 실제로 변경 사항이 적용되었는지, 그리고 어떻게 사용할 수 있는지 확인해 보겠습니다.
​
첫 번째 예제에서는 attr 접근자 앞에 private을 사용하겠습니다:

클래스 Foo
  private attr_accessor :awesome_variable
end

이러한 호출은 구문 구문 분석에 오류를 일으키지 않으며, 중요한 것은 awesome_variable 그리고awesome_변수 =메서드는 비공개가 됩니다.
​
별칭 메서드는 지금과 마찬가지로 새 메서드의 이름으로 기호를 반환하고 표시합니다.

클래스 Foo
  개인 별칭 :bar, :awesome_bar
end

흥미로운 사실은 더 많은 방법을 탐구할 수도 있다는 것입니다.인쇄 모듈은 개인과 ATTR 사이에서 호출할 수 있습니다.메서드는 표현식의 오른쪽에 있는 메서드의 이름이 포함된 배열을 반환하는 것이 중요합니다.

모듈 클래스
  def awesome_print(names)
    이름을 넣습니다
    names
  end
end
클래스 Foo
  private awesome_print attr_reader :awesome_bar
end 

요약

이 글이 도움이 되셨기를 바랍니다! 루비 3.0에 대한 더 많은 소식이 있다면 더 읽어보세요. 여기.

행복한 코딩!

루비 개발자 혜택

자세히 읽어보세요:

닥치고 돈 가져가세요 #1: 제품 개발 프로세스의 숨겨진 비용과 진정한 민첩성

CTO 과제 - 소프트웨어 제품의 확장 및 성장

관련 문서

상승하는 화살표와 비용 효율성 또는 절감을 상징하는 금화가 있는 하락하는 막대 차트의 추상적인 그림. 밝은 회색 바탕에 "In Code We Trust"라는 슬로건과 함께 왼쪽 상단에 The Codest 로고가 표시됩니다.
소프트웨어 개발

제품 품질 저하 없이 개발팀을 확장하는 방법

개발팀을 확장하고 계신가요? 제품 품질을 저하시키지 않고 성장하는 방법을 알아보세요. 이 가이드에서는 확장할 시기의 징후, 팀 구조, 채용, 리더십 및 도구와 더불어 The Codest가 어떻게...

최신
소프트웨어 개발

미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

최신
소프트웨어 개발

라트비아에 본사를 둔 10대 소프트웨어 개발 기업

최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

thecodest
엔터프라이즈 및 스케일업 솔루션

Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

thecodest
소프트웨어 개발

폴란드 아웃소싱을 위한 최고의 가이드

폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

더코데스트

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean