모바일 클린아키텍처 - UI

대략 이런 구조, 각 layer 마다 Translater(mapper)w 가 있을 수 있다.

UI 계층의 역할

  • View (Widget)

    • 화면 표시, 애니메이션, 사용자 입력 등 UI 관련 모든 처리 담당

    • BuildContext를 통해 테마, 네비게이션, 미디어 쿼리 등 다양한 UI 정보를 얻음

    • 플랫폼 의존적 구현 가능

      • Platform.isIOS (iOS/Android 별 위젯 분기)

      • 플랫폼의 렌더링 방식(Material vs. Cupertino)에 따라 UI가 다르게 표시

      • 네이티브 코드 MethodChannel 사용

  • ViewModel (또는 Presenter)

    • 비즈니스 로직과 상태만 관리

    • View와 완전히 분리되어 테스트 및 재사용 용이

    • UI 프레임워크나 OS 렌더링 API, BuildContext에 직접 접근하지 않음

여기서, UI 프레임워크란

  • 버튼, 폼, 네비게이션 바 등 다양한 UI 요소와 레이아웃, 스타일, 상호작용 기능을 미리 구현해둔 컴포넌트, 라이브러리, 도구의 집합

## Flutter의 UI 프레임워크에서 제공하는 버튼 컴포넌트를 사용하는 예
ElevatedButton(
  onPressed: () {},
  child: Text('확인'),
)

OS 렌더링 API(Rendering API) 란

  • 운영체제(OS)가 제공하는 저수준 그래픽 처리 인터페이스

  • UI 프레임워크가 실제로 화면에 그래픽을 그릴 때, 내부적으로 OS 렌더링 API를 호출해 픽셀을 렌더링

요약 정리

  • UI 프레임워크는 개발자가 쉽게 UI를 만들 수 있도록 추상화된 고수준 도구입니다.

  • OS 렌더링 API는 UI 프레임워크가 내부적으로 사용하는 저수준 그래픽 엔진입니다.

  • 즉, UI 프레임워크는 OS 렌더링 API 위에서 동작하며, 개발자는 보통 렌더링 API를 직접 다루지 않습니다.

[Android] Activity/Fragment가 View를 의미하지 않는다는 의미

1. 용어 구분

  • View 실제 화면에 그려지는 UI 컴포넌트 (TextView, Button, ImageView 등)

  • Activity 앱의 한 화면 전체를 담당하는 컨테이너

  • Fragment Activity 내에서 UI의 일부를 담당하는 모듈화 단위 → 둘 다 여러 View를 포함·관리하는 컨트롤러/관리자 역할

2. Activity/Fragment와 View의 차이

  • Activity/Fragment는 View가 아님

    • Activity/Fragment: UI 구조, 동작, 생명주기, 화면 전환 등 로직 및 컨테이너 역할

    • View: 실제로 화면에 그려지는 UI 요소

    • Activity/Fragment는 View를 소유/관리할 뿐, 그 자체가 View는 아님

  • 예시

    • ActivitysetContentView()로 View를 배치

    • FragmentonCreateView()에서 View를 생성

3. 실무에서 혼동하기 쉬운 사례

  • Activity = View? Activity는 View를 포함하지만, View 계층에 직접 속하지 않음

  • Fragment = View? Fragment는 View를 반환하지만, View를 관리하는 객체일 뿐 그 자체가 View는 아님

4. 예시 코드

// Activity 예시
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) // View를 설정
    }
}

// Fragment 예시
class MyFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.fragment_my, container, false) // View 생성
    }
}
  • Activity/Fragment는 View를 생성·관리하지만, 자신이 View는 아님

5. 핵심 요약

  • Activity/Fragment = View의 컨트롤러/컨테이너

  • View = 실제 화면에 그려지는 UI 요소

  • 용어를 명확히 구분해 사용해야 하며, Activity/Fragment를 View라고 혼동하면 안 됨

Last updated