[Flutter] 정보은닉

Raon·2일 전
0

Flutter

목록 보기
26/26

Flutter를 활용해 UI를 그리다 보면, 다음과 같은 형태의 위젯을 구현하게 된다.

정보은닉 미적용

class SomeWidget extends StatelessWidget {
	final String name;
    final int age;
    
    const SomeWidget({
    	required this.name,
        required this.age,
    });
    
    Widget build(BuildContext context) {
    	return ListTile(
        	title: Text(name),
            subtitle: Text(age.toString()),
        );
    }
}

나는 최근까지 이렇게 UI를 그리는 것에 대해 이상함을 느끼지 않았다. 하지만, 최근들어, 이렇게 작성하는 것이 과연 올바은 작성 방법인지 헷갈리기 시작했다. 그 이유는 바로 OOP의 핵심 중 하나인 정보은닉 때문이다.

정보은닉은 객체 내부의 구현을 숨겨 객체의 외부로부터 들어오는 다양한 요청에 대해 객체의 상태(various)가 오염되지 않도록 하는 프로그래밍 기법이다. 쉽게 말해, private를 써서 클래스의 변수나 함수가 보이지 않도록 한다는 말이다.

그렇다면, 나는 왜 앞서 소개한 예시에서 이상함을 느꼈을까? 그것은 바로 SomeWidget이라는 클래스는 정보은닉이 지켜지지않았기 때문이다.

final SomeWidget child = SomeWidget(name: "Raon", age: 30);
print(child.name);
print(child.age);

실제로, 이렇게 코드를 작성해보면 SomeWidget내부의 변수에 접근이 가능한 것을 알 수 있다.

그래서 나는 위의 코드를 아래와 같이 변경해봤다.

정보은닉 적용

class SomeWidget extends StatelessWidget {
	final String _name;
  	final int _age;

  	const SomeWidget({
    	required String name, 
        required int age,
	}) : _name = name,
    	 _age = age;

  	
  	Widget build(BuildContext context) {
    	return ListTile(title: Text(_name), subtitle: Text(_age.toString()));
  	}
}

이렇게 클래스를 작성할 경우, 내부 변수는 private로 선언되고 생성자가 호출될 때 값이 주입된 이후 접근이 불가능해지기 때문에 외부로부터 안전해진다.

profile
Flutter 개발자

0개의 댓글