window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() 루비 3.0. Ruby와 잘 알려지지 않은 개인정보 제어 방법 - The Codest
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 과제 - 소프트웨어 제품의 확장 및 성장

관련 문서

소프트웨어 개발

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

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

최신
소프트웨어 개발

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

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

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

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

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

thecodest
소프트웨어 개발

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

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

더코데스트
엔터프라이즈 및 스케일업 솔루션

IT 감사 도구 및 기술에 대한 완벽한 가이드

IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 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