-
변수 선언에 _(언더바)를 붙이는 경우와 상세 예시사소한 개발팁 2025. 4. 3. 17:37반응형
Flutter에서 언더바로 시작하는 변수란?
Flutter는 Dart 언어를 기반으로 하는 프레임워크로, Dart의 변수 선언 규칙을 그대로 따릅니다. Dart 언어에서 변수의 이름 앞에 언더바(_)를 붙이는 것은 해당 변수가 '프라이빗(private)'임을 나타냅니다. 즉, 이 변수를 선언한 파일 내에서만 접근할 수 있으며, 다른 파일에서는 접근할 수 없습니다. 이렇게 하는 주된 이유는 객체 지향 프로그래밍의 캡슐화(encapsulation) 원칙을 준수하기 위함입니다. 프라이빗 변수를 사용함으로써 클래스의 내부 구현을 숨기고, 클래스 외부에서 해당 변수에 직접 접근하지 못하게 막는 것입니다.
언더바 사용의 장점
프라이빗 변수를 사용함으로써 얻는 가장 큰 장점은 데이터 무결성(integrity)입니다. 데이터를 보호하고 비즈니스 로직을 명확하게 유지할 수 있어 보다 안전한 코드 작성이 가능합니다. 또한 외부에서 직접 접근할 수 없으므로, 클래스 내부에서 특정 로직을 통해 값의 변경이나 검증을 할 수 있습니다. 이는 프로그램의 유지보수성을 높이고, 버그 발생 가능성을 줄이는 데 기여합니다. 언더바를 사용하여 변수를 프라이빗으로 만드는 것이 좋으니, 일반적으로는 이를 권장합니다.
예시 1: 프라이빗 변수 사용하기
가장 간단한 예로, User 클래스를 만들어 보겠습니다. 이 클래스에서는 사용자의 이름과 나이를 프라이빗 변수로 선언하겠습니다. 사용자가 이 값에 직접 접근하는 것이 아니라, 메서드를 통해 값을 변경하도록 설정해 보겠습니다.
class User { String _name; // 프라이빗 변수 int _age; // 프라이빗 변수 User(this._name, this._age); String get name => _name; int get age => _age; void setName(String name) { if (name.isNotEmpty) { _name = name; } } void setAge(int age) { if (age > 0) { _age = age; } } }
위의 코드에서
_name
과_age
는 프라이빗 변수입니다. 클래스 외부에서 직접 접근할 수 없으므로, getters와 setters를 통해 값에 접근하거나 변경해야 합니다. 이와 같이 클래스를 설계하면 데이터가 안전하게 보호되고, 사용자가 올바른 방법으로만 데이터를 수정할 수 있습니다.예시 2: 프라이빗 변수 활용하기
이제 위의 User 클래스를 사용하여 실제 객체를 만들어보겠습니다. 그리고 프라이빗 변수에 대한 메서드를 호출해 값에 접근하고 변경해 보겠습니다.
void main() { User user = User('John Doe', 30); print('Name: ${user.name}, Age: ${user.age}'); // Name: John Doe, Age: 30 user.setName(''); // 이름을 빈 문자열로 설정하려 할 경우 무시됨 user.setAge(-5); // 나이를 음수로 설정하려 할 경우 무시됨 print('Name: ${user.name}, Age: ${user.age}'); // Name: John Doe, Age: 30 }
위 예시에서
setName
메서드는 빈 문자열을 무시하고,setAge
메서드는 음수 값을 무시하는 방식으로 작동합니다. 이렇게 하여 데이터의 유효성을 보장할 수 있습니다. 프라이빗 변수를 통해 구현된 영역 보호가 얼마나 유용한지를 보여주는 좋은 예입니다.예시 3: 상속과 프라이빗 변수
상속 관계에서도 프라이빗 변수의 특성은 특히 중요합니다. 프라이빗 변수는 해당 클래스를 상속받은 서브클래스에서 직접 접근할 수 없기 때문입니다.
예를 들어, 다음과 같은 클래스를 정의해 보겠습니다.
class Admin extends User { String _role; // 프라이빗 변수 Admin(String name, int age, this._role) : super(name, age); String get role => _role; }
이 경우
Admin
클래스는User
클래스를 상속받지만,_name
과_age
는 여전히 접근할 수 없습니다.void main() { Admin admin = Admin('Alice', 28, 'Manager'); print('Admin Name: ${admin.name}, Age: ${admin.age}, Role: ${admin.role}'); }
이렇게 상속 구조에서도 프라이빗 변수를 사용하면 클래스 간의 독립성을 유지할 수 있습니다. 클래스 내부의 데이터를 안전하게 보호하면서도, 다른 클래스를 통한 접근을 허용하는 장점이 있습니다.
주의사항: 프라이빗 변수의 사용
프라이빗 변수를 사용할 때 주의할 점은 객체 지향 원칙에 따라 정보의 은닉을 극대화하는 것입니다. 하지만 너무 과도하게 프라이빗 변수를 사용하는 것은 오히려 코드의 복잡성을 증가시킬 수 있습니다. 불필요하게 많은 프라이빗 변수를 만들어 코드가 읽기 어렵고 유지 보수가 힘들어지지 않도록 주의해야 합니다. 따라서 사용자는 어느 정도의 데이터 은닉이 필요하고, 외부에 노출된 인터페이스가 해당 데이터에 대한 유용한 정보를 제공할 수 있도록 설계해야 합니다.
또한, 다중 파일 구조에서 변수 사용 시 언더바만으로는 완전한 보안을 제공할 수 없습니다. 파일 내에서의 사용은 안전하나, 컴파일된 파일이나 디버깅을 통해 다른 파일에서 접근할 수 있는 가능성이 있습니다. 필요한 경우 더 강력한 보안 방법을 고려해야 합니다.
마무리
Flutter에서 변수 선언 시 언더바(_)를 붙이는 것은 변수를 프라이빗으로 만들고 객체의 캡슐화를 촉진하는 중요한 기법입니다. 이를 통해 데이터 무결성을 유지할 수 있고, 외부에서 불필요하게 변경되는 것을 방지할 수 있습니다. 객체 지향 프로그래밍의 원칙에 따라 프로젝트의 가독성과 유지 보수성을 높이는 데 크게 기여할 수 있습니다. 각 클래스의 데이터가 맡은 역할과 책임에 맞는 방식으로 잘 관리될 수 있도록 하기 위해 언더바를 적절히 활용하는 것이 필요합니다. 이러한 방법은 특히 대규모 프로젝트에서 유용하게 작용하며, 코드를 작성하는 개발자에게는 강력한 도구가 됩니다. 따라서 언더바의 활용을 통해 보다 안전하고 효율적인 Flutter 개발을 실현해 보시기 바랍니다.
반응형'사소한 개발팁' 카테고리의 다른 글
Gemini CLI 바로 사용하기 (8) 2025.06.27 Vector DB와 Vector 연산을 활용할 수 있는 API 소개 (0) 2025.04.02 PostgreSQL과 pgvector를 활용한 FAQ 검색 시스템 구축하기 (0) 2025.04.01 Supabase RLS 마스터하기: 데이터 보안의 핵심 (0) 2025.03.27 발전하는 생성형 AI, 프롬프트 엔지니어링이 더 이상 필요 없다고? 천만에 말씀 (0) 2025.03.27