쪽지발송 성공
Click here
재능넷 이용방법
재능넷 이용방법 동영상편
가입인사 이벤트
판매 수수료 안내
안전거래 TIP
재능인 인증서 발급안내

🌲 지식인의 숲 🌲

🌳 디자인
🌳 음악/영상
🌳 문서작성
🌳 번역/외국어
🌳 프로그램개발
🌳 마케팅/비즈니스
🌳 생활서비스
🌳 철학
🌳 과학
🌳 수학
🌳 역사
해당 지식과 관련있는 인기재능

안녕하세요.신호처리를 전공한 개발자 입니다. 1. 영상신호처리, 생체신호처리 알고리즘 개발2. 안드로이드 앱 개발 3. 윈도우 프로그램...

 안녕하세요. 안드로이드 기반 개인 앱, 프로젝트용 앱부터 그 이상 기능이 추가된 앱까지 제작해 드립니다.  - 앱 개발 툴: 안드로이드...

안녕하세요. 경력 8년차 프리랜서 개발자 입니다.피쳐폰 2g 때부터 지금까지 모바일 앱 개발을 전문적으로 진행해 왔으며,신속하 정확 하게 의뢰하...

Flutter로 크로스 플랫폼 위젯 구현하기

2024-10-08 12:28:34

재능넷
조회수 360 댓글수 0

Flutter로 크로스 플랫폼 위젯 구현하기 🚀

 

 

안녕하세요, 플러터 열정 넘치는 개발자 여러분! 오늘은 정말 흥미진진한 주제로 여러분과 함께 시간을 보내려고 해요. 바로 "Flutter로 크로스 플랫폼 위젯 구현하기"입니다! 🎉 이 여정을 통해 우리는 Flutter의 마법 같은 세계로 깊이 들어가 볼 거예요. 마치 재능넷에서 다양한 재능을 발견하고 거래하듯이, 우리도 Flutter의 다양한 위젯들을 탐험하고 활용해볼 거랍니다!

🌟 잠깐! 아시나요? Flutter를 사용하면 iOS, Android, 웹, 데스크톱까지 하나의 코드베이스로 개발할 수 있어요. 마치 재능넷에서 다양한 재능을 한 곳에서 만나듯이 말이죠!

자, 이제 우리의 Flutter 모험을 시작해볼까요? 안전벨트 꽉 매세요. 우리는 곧 크로스 플랫폼 개발의 신세계로 떠나게 될 테니까요! 🚀

1. Flutter란 무엇인가요? 🤔

Flutter는 구글이 개발한 오픈소스 UI 소프트웨어 개발 키트(SDK)입니다. 하나의 코드베이스로 모바일, 웹, 데스크톱 애플리케이션을 개발할 수 있게 해주는 놀라운 도구죠. 마치 재능넷에서 다양한 재능을 한 곳에서 만나듯이, Flutter로 다양한 플랫폼을 위한 앱을 한 번에 개발할 수 있어요!

📚 Flutter의 주요 특징:

  • 빠른 개발 속도 (Hot Reload 기능)
  • 아름답고 네이티브한 성능의 UI
  • 풍부한 위젯 라이브러리
  • 크로스 플랫폼 지원
  • 활발한 커뮤니티 지원

Flutter는 Dart라는 프로그래밍 언어를 사용합니다. Dart는 객체 지향 언어로, Java나 JavaScript와 비슷한 문법을 가지고 있어 배우기 쉽답니다. 😊

Flutter 개발 프로세스 Flutter Android iOS Web Desktop

위의 다이어그램에서 볼 수 있듯이, Flutter는 하나의 코드베이스에서 여러 플랫폼으로 뻗어나가는 구조를 가지고 있습니다. 이는 개발자들에게 엄청난 효율성을 제공하죠!

Flutter를 사용하면, 마치 재능넷에서 다양한 재능을 한 곳에서 관리하듯이, 여러 플랫폼의 앱을 효율적으로 개발하고 관리할 수 있답니다. 이제 우리는 이 강력한 도구를 사용해 크로스 플랫폼 위젯을 어떻게 구현하는지 자세히 알아볼 거예요. 준비되셨나요? 다음 섹션으로 넘어가볼까요? 🚀

2. Flutter 위젯의 기본 🧱

자, 이제 Flutter 위젯의 세계로 뛰어들어볼 시간이에요! 🏊‍♂️ Flutter에서는 모든 것이 위젯입니다. 버튼, 텍스트, 이미지, 심지어 레이아웃까지도 모두 위젯이에요. 이는 마치 재능넷에서 다양한 재능들이 모여 하나의 플랫폼을 이루는 것과 비슷하답니다.

🌈 Flutter 위젯의 두 가지 주요 유형:

  • Stateless 위젯: 상태가 변하지 않는 정적인 위젯
  • Stateful 위젯: 상태가 동적으로 변할 수 있는 위젯

위젯은 레고 블록과 같아요. 작은 위젯들을 조합해 더 큰 위젯을 만들고, 그렇게 만든 위젯들을 또 조합해 전체 앱을 구성하는 거죠! 이런 방식으로 Flutter는 복잡한 UI도 쉽게 구현할 수 있게 해줍니다.

2.1 Stateless 위젯 예제

Stateless 위젯은 한 번 생성되면 변하지 않는 위젯입니다. 예를 들어, 단순한 텍스트 표시나 아이콘 같은 것들이죠. 아래의 코드를 볼까요?


import 'package:flutter/material.dart';

class WelcomeWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Text('재능넷에 오신 것을 환영합니다!');
  }
}
  

이 위젯은 단순히 "재능넷에 오신 것을 환영합니다!"라는 텍스트를 표시합니다. 한 번 생성되면 이 텍스트는 변하지 않죠.

2.2 Stateful 위젯 예제

Stateful 위젯은 동적으로 변할 수 있는 위젯입니다. 사용자 입력에 반응하거나, 데이터가 변경될 때 업데이트되는 위젯들이 여기에 속해요. 다음 예제를 볼까요?


import 'package:flutter/material.dart';

class CounterWidget extends StatefulWidget {
  @override
  _CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State<counterwidget> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <widget>[
        Text('카운터: $_counter'),
        ElevatedButton(
          onPressed: _incrementCounter,
          child: Text('증가'),
        ),
      ],
    );
  }
}
  </widget></counterwidget>

이 위젯은 버튼을 누를 때마다 카운터가 증가하는 간단한 예제입니다. setState() 메서드를 호출하면 Flutter는 위젯을 다시 그려 변경된 상태를 반영합니다. 마치 재능넷에서 새로운 재능이 등록될 때마다 플랫폼이 업데이트되는 것과 비슷하죠!

Stateless vs Stateful 위젯 Stateless Widget Stateful Widget 상태 변경 가능

위의 다이어그램은 Stateless 위젯과 Stateful 위젯의 차이를 시각적으로 보여줍니다. Stateful 위젯은 내부 상태를 가지고 있어 동적으로 변할 수 있다는 것을 알 수 있죠.

Flutter의 위젯 시스템은 정말 강력하고 유연해요. 이를 잘 활용하면, 재능넷처럼 복잡하고 다양한 기능을 가진 앱도 쉽게 만들 수 있답니다! 위젯의 기본을 이해했으니, 이제 크로스 플랫폼 위젯을 어떻게 구현하는지 더 자세히 알아볼까요? 다음 섹션에서 계속됩니다! 🚀

3. 크로스 플랫폼 위젯 구현하기 🌍

자, 이제 우리의 여정이 본격적으로 시작됩니다! 크로스 플랫폼 위젯을 구현한다는 것은 무엇일까요? 간단히 말해, 하나의 코드로 여러 플랫폼(iOS, Android, 웹 등)에서 동작하는 위젯을 만드는 것을 의미합니다. 마치 재능넷에서 하나의 재능이 여러 분야에 적용될 수 있는 것처럼 말이죠! 🎭

🚀 크로스 플랫폼 위젯 구현의 장점:

  • 코드 재사용성 증가
  • 개발 시간 단축
  • 일관된 사용자 경험 제공
  • 유지보수 용이성

Flutter는 기본적으로 크로스 플랫폼을 지원하지만, 때로는 플랫폼별로 다른 동작이나 디자인이 필요할 수 있어요. 이럴 때 우리는 어떻게 해야 할까요? 걱정 마세요! Flutter는 이런 상황도 멋지게 해결할 수 있는 방법을 제공합니다.

3.1 플랫폼 감지하기

먼저, 현재 앱이 어떤 플랫폼에서 실행 중인지 감지해야 합니다. Flutter에서는 이를 위해 dart:io 패키지의 Platform 클래스를 사용할 수 있어요.


import 'dart:io' show Platform;

if (Platform.isAndroid) {
  // Android 특정 코드
} else if (Platform.isIOS) {
  // iOS 특정 코드
} else if (Platform.isWeb) {
  // 웹 특정 코드
}
  

이렇게 하면 각 플랫폼에 맞는 코드를 실행할 수 있습니다. 마치 재능넷에서 각 분야별로 맞춤형 서비스를 제공하는 것과 비슷하죠!

3.2 플랫폼별 위젯 사용하기

Flutter는 각 플랫폼의 네이티브 디자인을 모방한 위젯들을 제공합니다. 예를 들어, Cupertino 위젯은 iOS 스타일을, Material 위젯은 Android 스타일을 따릅니다.


import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

class PlatformButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Platform.isIOS
        ? CupertinoButton(
            child: Text('재능넷 둘러보기'),
            onPressed: () {
              // 버튼 동작
            },
          )
        : ElevatedButton(
            child: Text('재능넷 둘러보기'),
            onPressed: () {
              // 버튼 동작
            },
          );
  }
}
  

이 예제에서는 iOS에서는 CupertinoButton을, 다른 플랫폼에서는 ElevatedButton을 사용합니다. 이렇게 하면 각 플랫폼의 사용자들에게 친숙한 UI를 제공할 수 있어요!

3.3 반응형 레이아웃 만들기

크로스 플랫폼 앱을 만들 때 중요한 또 다른 요소는 반응형 레이아웃입니다. 다양한 화면 크기와 방향에 대응할 수 있어야 하죠.


import 'package:flutter/material.dart';

class ResponsiveLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        if (constraints.maxWidth > 600) {
          return WideLayout();
        } else {
          return NarrowLayout();
        }
      },
    );
  }
}
  

이 코드는 화면 너비에 따라 다른 레이아웃을 보여줍니다. 이렇게 하면 태블릿이나 데스크톱에서도 앱이 멋지게 보일 거예요!

반응형 레이아웃 Narrow Layout Wide Layout Screen Width

위의 다이어그램은 화면 너비에 따라 레이아웃이 어떻게 변하는지를 보여줍니다. 이런 방식으로 우리는 다양한 디바이스에 대응할 수 있어요!

3.4 플랫폼별 기능 구현하기

때로는 플랫폼별로 완전히 다른 기능을 구현해야 할 때도 있습니다. 예를 들어, 안드로이드에서만 사용 가능한 기능이 있다면 어떻게 해야 할까요?


import 'package:flutter/services.dart';

class PlatformService {
  static const platform = const MethodChannel('com.example.myapp/platform');

  Future<void> doSomethingPlatformSpecific() async {
    try {
      await platform.invokeMethod('doSomethingPlatformSpecific');
    } on PlatformException catch (e) {
      print("Failed to do something: '${e.message}'.");
    }
  }
}
  </void>

이 코드는 MethodChannel을 사용해 네이티브 코드와 통신합니다. 이를 통해 각 플랫폼의 고유한 기능을 활용할 수 있어요! 마치 재능넷에서 각 분야의 전문가들이 자신만의 특별한 기술을 발휘하는 것처럼 말이죠.

💡 Pro Tip: 크로스 플랫폼 위젯을 구현할 때는 항상 다음을 고려하세요:

  • 각 플랫폼의 디자인 가이드라인을 존중하기
  • 성능 최적화하기
  • 접근성 고려하기
  • 국제화 및 지역화 지원하기

여기까지 크로스 플랫폼 위젯 구현의 기본적인 개념들을 살펴보았습니다. 이제 우리는 하나의 코드로 여러 플랫폼에서 동작하는 앱을 만들 수 있는 기초를 다졌어요! 🎉

Flutter를 사용하면, 재능넷처럼 다양한 사용자들에게 맞춤형 경험을 제공하는 앱을 효율적으로 개발할 수 있답니다. 다음 섹션에서는 이러한 개념들을 실제 예제에 적용해볼 거예요. 준비되셨나요? 더 깊이 들어가 봅시다! 🚀

4. 실전 예제: 크로스 플랫폼 재능 공유 앱 만들기 🛠️

자, 이제 우리가 배운 내용을 실제로 적용해볼 시간입니다! 재능넷에서 영감을 받아, 간단한 크로스 플랫폼 재능 공유 앱을 만들어볼게요. 이 앱은 사용자가 자신의 재능을 등록하고, 다른 사람의 재능을 찾아볼 수 있는 기능을 제공할 거예요. 😊

4.1 프로젝트 설정

먼저, 새로운 Flutter 프로젝트를 생성해봅시다.


flutter create talent_share_app
cd talent_share_app
  

이제 우리의 앱을 위한 기본 구조가 만들어졌어요!

4.2 메인 화면 구현하기

먼저 앱의 메인 화면을 만들어볼게요. 이 화면은 사용자의 플랫폼에 따라 다르게 보일 거예요.


import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:io' show Platform;

class MainScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Platform.isIOS
        ? CupertinoPageScaffold(
            navigationBar: CupertinoNavigationBar(
              middle: Text('재능 공유'),
            ),
            child: Center(
              child: Text('재능넷에 오신 것을 환영합니다!'),
            ),
          )
        : Scaffold(
            appBar: AppBar(
              title: Text('재능 공유'),
            ),
            body: Center(
              child: Text('재능넷에 오신 것을 환영합니다!'),
            ),
          );
  }
}
  

이 코드는 iOS에서는 Cupertino 스타일을, 다른 플랫폼에서는 Material 디자인을 사용합니다. 이렇게 하면 각 플랫폼의 사용자들에게 친숙한 UI를 제공할 수 있어요!

4.3 재능 목록 위젯 만들기

이제 사용자들의 재능을 보여줄 목록 위젯을 만들어볼게요. 이 위젯은 모든 플랫폼에서 동일하게 사용될 거예요.


class TalentList extends StatelessWidget {
  final List<string> talents = [
    '웹 개발',
    '그래픽 디자인',
    '번역',
    '음악 작곡',
    '요리',
  ];

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: talents.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text(talents[index]),
          leading: Icon(Icons.star),
          onTap: () {
            // 재능 상세 정보로 이동
          },
        );
      },
    );
  }
}
  </string>

이 위젯은 재능 목록을 스크롤 가능한 리스트로 보여줍니다. ListView.builder를 사용하면 효율적으로 긴 목록을 처리할 수 있어요!

4.4 반응형 레이아웃 적용하기

이제 우리의 앱을 다양한 화면 크기에 대응할 수 있게 만들어 봅시다. 태블릿이나 데스크톱에서도 멋지게 보이도록 말이죠!


class ResponsiveLayout extends StatelessWidget {
  final Widget narrowLayout;
  final Widget wideLayout;

  ResponsiveLayout({required this.narrowLayout, required this.wideLayout});

  @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        if (constraints.maxWidth < 600) {
          return narrowLayout;
        } else {
          return wideLayout;
        }
      },
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ResponsiveLayout(
      narrowLayout: Scaffold(
        appBar: AppBar(title: Text('재능 공유')),
        body: TalentList(),
      ),
      wideLayout: Scaffold(
        appBar: AppBar(title: Text('재능 공유')),
        body: Row(
          children: [
            Expanded(child: TalentList()),
            Expanded(
              child: Center(
                child: Text('선택된 재능의 상세 정보가 여기에 표시됩니다.'),
              ),
            ),
          ],
        ),
      ),
    );
  }
}
  

이 코드는 화면 너비에 따라 다른 레이아웃을 보여줍니다. 좁은 화면에서는 단순한 리스트를, 넓은 화면에서는 리스트와 상세 정보를 나란히 보여주죠. 이렇게 하면 태블릿이나 데스크톱에서도 공간을 효율적으로 활용할 수 있어요!

4.5 플랫폼별 기능 추가하기

마지막으로, 안드로이드에서만 사용 가능한 특별한 기능을 추가해볼게요. 예를 들어, 안드로이드에서는 재능을 공유할 때 native share 기능을 사용할 수 있도록 해봅시다.


import 'package:flutter/services.dart';

class PlatformService {
  static const platform = const MethodChannel('com.example.talent_share_app/share');

  Future<void> shareTalent(String talent) async {
    if (Platform.isAndroid) {
      try {
        await platform.invokeMethod('shareTalent', {'talent': talent});
      } on PlatformException catch (e) {
        print("Failed to share talent: '${e.message}'.");
      }
    } else {
      // iOS나 다른 플랫폼에서의 공유 로직
      print('Sharing $talent on ${Platform.operatingSystem}');
    }
  }
}
  </void>

이 코드는 안드로이드에서 네이티브 공유 기능을 호출하고, 다른 플랫폼에서는 간단한 메시지를 출력합니다. 이렇게 하면 각 플랫폼의 특성을 살린 기능을 제공할 수 있어요!

4.6 최종 조립

이제 모든 요소를 조합해 최종 앱을 완성해봅시다.


import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:io' show Platform;

void main() {
  runApp(TalentShareApp());
}

class TalentShareApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Platform.isIOS
        ? CupertinoApp(
            title: '재능 공유',
            home: HomePage(),
          )
        : MaterialApp(
            title: '재능 공유',
            theme: ThemeData(primarySwatch: Colors.blue),
            home: HomePage(),
          );
  }
}

// HomePage, ResponsiveLayout, TalentList, PlatformService 클래스들은 이전에 정의한 대로 사용
  

이렇게 해서 우리의 크로스 플랫폼 재능 공유 앱이 완성되었습니다! 🎉

🌟 주요 포인트 정리:

  • 플랫폼 감지를 통한 적절한 UI 제공
  • 크로스 플랫폼 공통 위젯 (TalentList) 사용
  • 반응형 레이아웃으로 다양한 화면 크기 대응
  • 플랫폼별 고유 기능 구현 (Android native share)

이 앱은 iOS와 Android에서 각 플랫폼의 디자인 가이드라인을 따르면서도, 태블릿과 데스크톱에서도 멋지게 작동합니다. 또한 안드로이드에서는 특별한 공유 기능을 제공하죠. 마치 재능넷에서 다양한 재능을 한 곳에서 만나듯이, 우리의 앱도 여러 플랫폼과 디바이스를 아우르는 경험을 제공합니다!

이제 여러분은 Flutter를 사용해 크로스 플랫폼 앱을 만드는 기본적인 방법을 배웠습니다. 이를 바탕으로 더 복잡하고 풍부한 기능을 가진 앱을 만들어볼 수 있을 거예요. 재능넷처럼 다양한 사용자들의 니즈를 충족시키는 멋진 앱을 만들어보세요! 🚀

Flutter와 함께하는 여정이 즐거우셨기를 바랍니다. 앞으로도 계속해서 학습하고 성장하세요. 여러분의 재능이 빛을 발할 날이 곧 올 거예요! 화이팅! 💪😊

관련 키워드

  • Flutter
  • 크로스 플랫폼
  • 위젯
  • 반응형 레이아웃
  • Dart
  • iOS
  • Android
  • 웹 개발
  • 모바일 앱
  • 사용자 인터페이스

지식의 가치와 지적 재산권 보호

자유 결제 서비스

'지식인의 숲'은 "이용자 자유 결제 서비스"를 통해 지식의 가치를 공유합니다. 콘텐츠를 경험하신 후, 아래 안내에 따라 자유롭게 결제해 주세요.

자유 결제 : 국민은행 420401-04-167940 (주)재능넷
결제금액: 귀하가 받은 가치만큼 자유롭게 결정해 주세요
결제기간: 기한 없이 언제든 편한 시기에 결제 가능합니다

지적 재산권 보호 고지

  1. 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
  2. AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
  3. 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
  4. 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
  5. AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.

© 2024 재능넷 | All rights reserved.

댓글 작성
0/2000

댓글 0개

해당 지식과 관련있는 인기재능

소개안드로이드 기반 어플리케이션 개발 후 서비스를 하고 있으며 스타트업 경험을 통한 앱 및 서버, 관리자 페이지 개발 경험을 가지고 있습니다....

 안녕하세요 현재 안드로이드 기반 어플리케이션 제작 및 서비스를 하고 있으며,스타트업회사에 재직중입니다.- 개인앱, 프로젝트용 앱 등부...

안녕하세요.2011년 개업하였고, 2013년 벤처 인증 받은 어플 개발 전문 업체입니다.50만 다운로드가 넘는 앱 2개를 직접 개발/운영 중이며,누구보...

------------------------------------만들고 싶어하는 앱을 제작해드립니다.------------------------------------1. 안드로이드 ( 자바 )* 블루...

📚 생성된 총 지식 8,645 개

  • (주)재능넷 | 대표 : 강정수 | 경기도 수원시 영통구 봉영로 1612, 7층 710-09 호 (영통동) | 사업자등록번호 : 131-86-65451
    통신판매업신고 : 2018-수원영통-0307 | 직업정보제공사업 신고번호 : 중부청 2013-4호 | jaenung@jaenung.net

    (주)재능넷의 사전 서면 동의 없이 재능넷사이트의 일체의 정보, 콘텐츠 및 UI등을 상업적 목적으로 전재, 전송, 스크래핑 등 무단 사용할 수 없습니다.
    (주)재능넷은 통신판매중개자로서 재능넷의 거래당사자가 아니며, 판매자가 등록한 상품정보 및 거래에 대해 재능넷은 일체 책임을 지지 않습니다.

    Copyright © 2024 재능넷 Inc. All rights reserved.
ICT Innovation 대상
미래창조과학부장관 표창
서울특별시
공유기업 지정
한국데이터베이스진흥원
콘텐츠 제공서비스 품질인증
대한민국 중소 중견기업
혁신대상 중소기업청장상
인터넷에코어워드
일자리창출 분야 대상
웹어워드코리아
인터넷 서비스분야 우수상
정보통신산업진흥원장
정부유공 표창장
미래창조과학부
ICT지원사업 선정
기술혁신
벤처기업 확인
기술개발
기업부설 연구소 인정
마이크로소프트
BizsPark 스타트업
대한민국 미래경영대상
재능마켓 부문 수상
대한민국 중소기업인 대회
중소기업중앙회장 표창
국회 중소벤처기업위원회
위원장 표창