[PIG 개발일지] - Padding

배연우·2023년 9월 1일
0

PIG

목록 보기
1/1

여태까지 한 내용

지금까지는 View라는 객체에 alginment를 만들고, 크기를 만들고, 자식이 안에 포함되는 경우, 자식이 그보다 큰 경우 경고, 아닌 경우, 자식을 안에 넣는 것을 만들었다.

Padding - 구현 구체화하기

아직은 TextView나 ImageView 같은 것은 개발을 시작하지조차 않았기 때문에, 이것만 고민하면 된다.

1. Padding 객체 생각하기

Flutter에서는 Padding 전용 위젯이 있고, 객체에 padding을 적용하려면, Edgeinsets의 메서드를 사용해서 padding 값을 부여했었다. 나는 그냥 margin이나 이런 것들은 안 만들 생각이기에 그냥 Padding 객체 하나만 만들 생각이다. 그리고 이 Padding에는 실질적으로는 각 방향의 padding 값들만 저장하도록 할 것이다. 혹시나 margin 등을 만들 일이 생기게 된다면, 그때 다시 생각해볼 것이다.

IDEA: 가상의 View를 생성하기

가상의 View 만들기

가장 Padding을 만들기 위해서 가장 먼저 한 생각이다. 우선 가상의 View를 생성한 다음, 그 View안에서 padding을 넣든 alignment를 하든 그렇게 하는 방식으로 가는 것이 편할 것 같았다. 그림으로 표현하면 다음과 같다.
그림 1. 가상의 View 생성하기

1. 가상의 View에 Padding? Alignment?

가상의 View가 있고, 그 안에 실제로 자식이 들어가게 된다면, 혹은 자기 자신이 가상의 View에 들어가게 된다면, 가상의 View에 Alignment를 적용하고 내부 View에 padding을 놓느냐 아니면 그 반대로 하느냐? 이게 문제였었다.

a) 가상의 View에 alignment

처음에는 가상의 View에 Alignment를 적용하는 쪽으로 생각하였다. 그렇게 생각해보니, 자식이 부모보다 큰 경우와 같이 자식이 매우 큰 경우에 가상의 View를 하나 더 만들어 해결해야 한다는 안 좋은 결론에 이르렀다.

b) 가상의 View에 padding

이 경우에는 가상의 View 하나만으로 구현이 가능하다는 생각이 었다. 어차피 가상의 뷰여도 뷰 안에 있는 자식이 부모보다 큰 경우, 잘리기 때문에 코드도 더 간편할 것이라고 생각하였다. 그래서 이렇게 하기로 하였다.

2. 자기 자신에게 padding? 자식에게 padding?

사실 이 문제는 제일 위에 있는 배경에 padding 부여를 허가할지의 문제이기도 하고, 어떤 것이 더 좋을 것인지 고민해보는 단계이다. 만약 자식에게 padding을 하는 경우, 당연하게 제일 부모격인 배경 View에는 padding이 부여되지 않는다.

a) 자기 자신에게 부여하는 경우

이러면 부모 자신에게도 padding을 줄 수 있다. 구현을 하게 된다면 아마 이렇게 되지 않을까 한다.

가상 뷰 생성 (자신 + 패딩만큼 더해서)
자기 자신 + 자식 생성(기존 코드)
가상 뷰에 자신 삽입 (패딩의 Left Top 좌표에 배치)
가상 뷰 리턴

b) 자식에게 부여하는 경우

이러면 배경에는 패딩을 줄 수 없다. 구현을 한다면 이렇게 될 것 같다.

자기 자신 생성
자식 생성
가상 뷰 생성 (부모에서 패딩만큼 빼서)
가상 뷰에 자식 넣기 (정렬에 맞게)
가상 뷰를 부모에 넣기 (패딩의 Left Top 좌표에 배치)
부모 리턴

결론

A가 기존 코드 수정이 최소화된 상태에서 수정이 가능할 것 같다.

궁금점과 후기

1. 새 코드를 작성할 때 기존 코드는 영향을 안 받게 하고 싶다.

지금 코드의 경우, 어차피 TDD로 진행을 하고 있어서, 새 기능 추가에 대한 부담감이나 두려움은 거의 없지만 어떻게 하면 기존 코드에 영향을 주지 않고, 새로운 코드를 써내려갈 수 있을지에 대한 궁금증이 생기고 있다. 아마 객체지향의 특징들을 잘 이용한다면 가능할 것 같기도 하다.

2. 역시 추상화가 필요하다.

지금까지는 모든 class의 조상이 View라고 생각하고 코드를 제작중인데, 이러면 몇가지 문제가 생기게 된다. 우선 지금 View에는 TextView, Column, Row에는 사용하지 않는 기능들이 몇가지 들어있다. 그래서 View의 상위 클래스를 하나 만들고, 그곳에 공통적인 기능들을 넣는 방식으로 리펙터링을 해야겠다는 생각을 하였다. 최상위 클래스는 언제나 추상 클래스이거나 interface인 것이 좋은 것인걸까? 라는 생각이 든다.

profile
주니어 개발자

0개의 댓글