2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

솔리디티의 접근 제어자(Access Modifiers)에는 어떤 것들이 있나요?

_____
Q: 솔리디티(Solidity)의 접근 제어자(Access Modifiers)에는 어떤 것들이 있나요?

A: 솔리디티에서 함수와 상태 변수의 접근을 제어하기 위해 사용되는 주요 접근 제어자는 다음과 같습니다.

1. public
- 설명: 컨트랙트 내부, 외부는 물론 상속받은 컨트랙트에서도 접근 가능
- 함수/변수 모두에 적용 가능
- 자동으로 getter 함수 생성(상태 변수인 경우)

2. private
- 설명: 선언된 컨트랙트 내부에서만 접근 가능
- 상속받은 컨트랙트에서는 접근 불가
- 외부 호출 불가

3. internal
- 설명: 선언된 컨트랙트 내부와 상속받은(파생) 컨트랙트에서 접근 가능
- 외부 호출 불가
- 상태 변수 및 함수 모두에 사용

4. external
- 설명: 컨트랙트 외부에서만 호출 가능
- 내부에서 직접 호출 시 `this.func()` 형태로만 호출 가능 (가스비 추가 발생)
- 상태 변수에는 사용할 수 없음, 함수에만 적용

---

추가 설명
- 기본 접근제어자 : 상태 변수는 기본값이 `internal`이고, 함수는 명시하지 않으면 `public`이 아닙니다(함수는 기본적으로 `internal`처럼 작동).
- override 가능 : 상속 관계에서 접근 제어자를 더 넓게 변경할 수 있으나, 더 좁게 변경할 수는 없습니다 (예: private → internal 또는 public 가능, 반대는 불가).
- 사용 목적 : 스마트 컨트랙트 보안과 설계 가독성을 위해 누가 어떤 함수/변수에 접근 가능한지 명확히 하는 데 활용합니다.

---

요약표

| 접근 제어자 | 컨트랙트 내부 | 상속 컨트랙트 | 컨트랙트 외부 | 상태 변수 사용 가능 | 함수 사용 가능 |
|-------------|---------------|---------------|--------------|---------------------|---------------|
| public | O | O | O | O (getter 자동 생성) | O |
| private | O | X | X | O | O |
| internal | O | O | X | O | O |
| external | X (직접 호출 불가, this로 호출 가능) | X (직접 호출 불가) | O | X | O |
솔리디티(Solidity)는 이더리움 블록체인에서 스마트 계약을 작성하기 위한 프로그래밍 언어입니다.

스마트 계약의 보안과 접근 제어는 매우 중요하며, 이를 위해 솔리디티는 여러 가지 접근 제어자를 제공합니다.

접근 제어자는 특정 함수나 변수에 대한 접근 권한을 설정하여, 계약의 안전성을 높이고 의도하지 않은 사용을 방지하는 데 도움을 줍니다.

솔리디티에서 제공하는 주요 접근 제어자는 다음과 같습니다.

1. `public` - 설명 : `public`으로 선언된 함수나 변수는 계약 외부에서 접근할 수 있습니다.

즉, 누구나 해당 함수나 변수에 접근할 수 있으며, 다른 계약에서도 호출할 수 있습니다.

- 사용 예 : 주로 외부에서 호출해야 하는 함수나 상태 변수를 정의할 때 사용됩니다.



2. `private` - 설명 : `private`으로 선언된 함수나 변수는 해당 계약 내에서만 접근할 수 있습니다.

즉, 다른 계약이나 외부에서 접근할 수 없습니다.

- 사용 예 : 계약 내부에서만 사용해야 하는 데이터나 로직을 숨기고 싶을 때 사용됩니다.



3. `internal` - 설명 : `internal`로 선언된 함수나 변수는 해당 계약 및 이를 상속받은 계약에서 접근할 수 있습니다.

외부 계약이나 사용자에게는 접근이 불가능합니다.

- 사용 예 : 상속 구조에서 부모 계약의 기능을 자식 계약에서 사용할 수 있도록 하면서, 외부에서의 접근은 차단하고 싶을 때 사용됩니다.



4. `external` - 설명 : `external`로 선언된 함수는 외부에서만 호출할 수 있으며, 계약 내부에서는 호출할 수 없습니다.

이 경우, 함수의 인자는 메모리나 스토리지에 저장되지 않고, 호출 시에 직접 전달됩니다.

- 사용 예 : 외부에서 호출될 목적으로 설계된 함수에 적합하며, 가스 비용을 절약할 수 있는 장점이 있습니다.



5. `view`와 `pure` - 설명 : `view`와 `pure`는 접근 제어자라기보다는 함수의 상태를 나타내는 키워드입니다.

- `view`: 상태 변수를 읽을 수 있지만, 수정할 수는 없는 함수입니다.

- `pure`: 상태 변수를 읽거나 수정하지 않는 함수로, 오직 입력된 인자만을 사용하여 결과를 반환합니다.

- 사용 예 : 데이터 조회를 위한 함수에 사용되며, 블록체인 상태를 변경하지 않기 때문에 가스 비용이 발생하지 않습니다.



6. `payable` - 설명 : `payable`은 접근 제어자가 아니라 함수의 특성을 나타내는 키워드로, 이 함수를 호출할 때 이더를 전송할 수 있음을 의미합니다.

- 사용 예 : 이더를 수신해야 하는 함수에 사용됩니다.

결론 솔리디티의 접근 제어자는 스마트 계약의 보안과 기능성을 높이는 데 중요한 역할을 합니다.

각 접근 제어자는 특정한 사용 사례에 맞춰 설계되었으며, 개발자는 계약의 요구 사항에 따라 적절한 접근 제어자를 선택하여 사용해야 합니다.

이를 통해 계약의 의도된 동작을 보장하고, 외부 공격으로부터 보호할 수 있습니다.

스마트 계약을 설계할 때는 이러한 접근 제어자의 특성을 잘 이해하고 활용하는 것이 필수적입니다.

작성자: 최지성 [비회원] | 작성일자: 1년 전 2024-11-22 19:31:59
조회수: 211 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.