안녕하세요 오늘은 화면을 보기좋게 구성하는 여러가지 레이아웃의 간단한 정리와 가이드라인을 포스팅 해보겠습니다.
안드로이드는 여러가지 디바이스들이 존재하고 디바이스마다 각 크기가 다르기 때문에 어느 디바이스에서도 일관된 경험을 할 수 있게 구성을 해야 합니다. 또한 기능 구현을 할 때도 신경을 써야하지만 landscape, portrait 등 화면 회전 요소도 생각을 해야합니다.
먼저 안드로이드 스튜디오에서 화면을 구하는데 사용하는 6가지 레이아웃을 먼저 살펴보겠습니다.

출처 https://recipes4dev.tistory.com/66
LinearLayout은 요소들을 수평 또는 수직으로 정렬하기 위한 컨테이너 역할을 하는 레이아웃입니다.

LinearLayout은 카카오톡 채팅방이나 채팅방 목록등의 레이아웃을 확인하면 쉽게 이해하실 수 있습니다.
단순한 구조로 뷰를 이루는대 효과적이며 구조가 간단하고 계산 비용이 적어 성능이 우수합니다.
하지만 복잡한 UI구성을 할 때는 LinearLayout으로는 힘든 경우가 많아 단순한 UI구성이나 선형적인 요소 정렬이 필요할 때 사용하시면 좋습니다.
RelativeLayout은 상대적인 위치에 따라 뷰를 배치하는데 사용됩니다. 뷰 간의 상대적인 위치를 지정하여 유연하고 복잡한 UI 구성이 가능합니다.

여러 속성으로 다양한 UI구성을 가능하게 해주는 레이아웃입니다. 하지만 계층 구조가 복잡해질수록 성느이 저하될 수 있으므로, 최대한 계층 구조를 단순하게 유지해줘야 합니다.
FrameLayout은 자식으로 추가된 여러 뷰 위젯들 중 하나를 Layout의 전면에 표시할 때 사용하는 레이아웃입니다. 스택구조로 이루어지며 가장 최근에 추가된 view가 가장 상위의 위치합니다.

주로 Fragment의 컨테이너 역할로써 FrameLayout을 사용합니다.
간단하면서도 유연한 레이아웃으로, 단일 뷰나 여러뷰를 겹쳐서 사용, 상태 변화에 따라 뷰를 변경하는 등 여러가지 상황에서 쓸 수 잇는 뷰 입니다.
그러나 겹치는 뷰가 많아질수록 가독성과 유지보수성이 떨어지므로, FrameLayout을 너무 많이 사용하는 것은 권장하지않습니다.
TableLayout은 자식 View 위젯들을 테이블(행과 열)로 나누어 표시하는 Layout 클래스입니다.

제가 생각했을 때 계산기 만큼 TableLayout을 잘 설명할 수 있는 그림은 없는것 같습니다.
행과 열의 구조를 가지고 있고 구조화된 데이터를 표현하는데 가장 적합한 뷰 입니다.(제 생각...)
Table 형태로 데이터를 표현하는데 특화되어 있어 다른 유형의 레이아웃에 비해서는 유연성이 많이 떨어지는 편입니다.
ListView는 데이터를 세로 목록 형태로 표시하는 데 사용되는 뷰입니다.
ListView와 같은 뷰 그룹은 스크롤 기능을 지원하며 사용자가 배치된 각 항목을 선택하는것도 가능합니다.

ListView에 사용자가 정의한 데이터를 표시하기 위해서는 Adapter를 사용해야 합니다.
예전에는 저도 프로젝트를 진행하며 게시판 형태의 UI를 만들때는 꼭 ListView를 사용했엇습니다.(요즘은 RecyclerView 사용중...)
많은 양의 데이터를 목록 표시를 하기 위한 효과적인 뷰입니다.
GridView는 격자 형식으로 데이터를 표시하는 다목적 뷰입니다.

위의 그림과 같이 목록은 행과 열로 나뉘어 격자 형태로 표시되며, 각 격자는 목록 아이템을 나타냅니다.
물론 ListView와 마찬가지로 데이터를 표시하기 위해서는 Adpater를 사용해야 합니다.
GridView의 장점으로는 격자 형식으로 데이터를 표현하기 때문에 직관적인 UI를 제공합니다.
또한 스크롤이 가능해 많은 양의 데이터를 처리할 수 있고 다양한 커스터마이징을 통해 개발자가 원하는 모양과 동작을 구현할 수 있습니다.
단점으로는 고정된 크기의 격자를 사용해 다양한 화면 크기와 방향에 대한 대응을 해줘야합니다.
또한 아이템의 크기가 가변적일 경우에는 GridView는 부적합합니다.
안드로이드에서 많이 쓰이느 6가지의 레이아웃의 기본적인 포스팅이기 때문에 더 자세한 내용은 Android docs를 참고하시면 공부하실 때 도움이 됩니다.