요약 - 보안 금고
Coddy Lua 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 70개 중 48번째.
챌린지
쉬움클로저 기반의 프라이버시를 사용하여 진정으로 안전한 저장 시스템을 만드는 Vault 클래스를 만들어 봅시다! 이 금고는 올바른 비밀번호를 제공해야만 접근할 수 있는 비밀 내용을 보관합니다.
코드는 두 개의 파일로 구성됩니다:
Vault.lua: 내용과 비밀번호가 모두 생성자 내부의 로컬 변수에 저장되어 외부 접근으로부터 완전히 숨겨진 클래스를 만듭니다. 생성자:new(contents, password)는 이 값들을 로컬 변수에 저장한 다음, 객체 인스턴스에 직접 메서드를 정의해야 합니다::open(attemptedPassword)— 시도된 비밀번호가 저장된 비밀번호와 일치하는지 확인합니다. 일치하면 비밀 내용을 반환합니다. 일치하지 않으면"Access Denied"를 반환합니다.
main.lua: Vault 모듈을 불러오고 세 가지 입력을 읽습니다: 저장할 비밀 내용, 설정할 비밀번호, 그리고 비밀번호 시도. 내용과 비밀번호로 금고를 생성한 다음, 시도된 비밀번호로 금고를 열어보고 그 결과를 출력하세요. 또한vault.contents에 직접 접근을 시도하고 그 결과를 출력하여 내용이 진정으로 프라이빗함을 증명하세요.
세 가지 입력을 받게 됩니다:
- 금고에 저장할 비밀 내용
- 금고를 보호할 비밀번호
- 금고를 열기 위해 시도할 비밀번호
출력은 두 줄이어야 합니다:
Result: {resultFromOpen}
Direct access: {whatYouGetFromVaultContents}예를 들어, 입력이 Gold Coins, secret123, secret123인 경우 출력은 다음과 같아야 합니다:
Result: Gold Coins
Direct access: nil입력이 Diamond, mypass, wrongpass인 경우 출력은 다음과 같아야 합니다:
Result: Access Denied
Direct access: nil여기서 핵심 통찰은 contents와 password가 생성자 내부의 로컬 변수로만 존재한다는 것입니다. :open() 메서드는 클로저를 통해 이들에 접근할 수 있지만, 그 외의 어떤 것도(심지어 vault.contents, vault._contents, 또는 vault.password조차도) 접근할 수 없습니다. 이것이 진정한 캡슐화입니다!
직접 해보기
-- Vault 모듈 불러오기
local Vault = require('Vault')
-- 입력값 읽기
local contents = io.read()
local password = io.read()
local attemptedPassword = io.read()
-- TODO: contents와 password를 사용하여 vault 생성
-- TODO: attemptedPassword로 vault 열기 시도
-- TODO: "Result: {resultFromOpen}" 형식으로 결과 출력
-- TODO: vault.contents에 직접 접근을 시도하고 그 결과를 출력
-- "Direct access: {whatYouGetFromVaultContents}" 형식으로 출력