Skip to content

๐ŸŽจ Resource Convention

yangsooplus edited this page Nov 7, 2022 · 1 revision

์ฐธ๊ณ 

Layout

  • <WHAT>_<WHERE>

WHAT

Prefix ์„ค๋ช…
activity_ Activity์—์„œ ์“ฐ์ด๋Š” layout
fragment_ Fragment์—์„œ ์“ฐ์ด๋Š” layout
dialog_ Dialog์—์„œ ์“ฐ์ด๋Š” layout
view_ CustomView์—์„œ ์“ฐ์ด๋Š” layout
item_ RecyclerView, GridView, ListView๋“ฑ์—์„œ ViewHolder์— ์“ฐ์ด๋Š” layout
layout_ <include/>๋กœ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ณตํ†ต์˜ layout

์˜ˆ์‹œ

  • activity_main: MainActivity์˜ layout
  • fragment_request: RequestFragment์˜ layout
  • dialog_contact: ๋ฌธ์˜์•ˆ๋‚ด Dialog์˜ layout
  • view_rating: ์ปค์Šคํ…€์œผ๋กœ ๋งŒ๋“  RatingView์˜ layout
  • item_my_car: ๋‚ด์ฐจ๋Ÿ‰ ๋ชฉ๋ก์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ๊ฐ์˜ item์˜ layout
  • layout_dealer_review: ์žฌ์‚ฌ์šฉ๋˜๋Š” ๋”œ๋Ÿฌ๋ฆฌ๋ทฐ layout

ID

  • <WHAT>_<DESCRIPTION>
  • View์˜ ๋Œ€๋ฌธ์ž๋ฅผ ์ถ•์•ฝํ•˜์—ฌ <WHAT>์˜ Prefix๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์•„๋ž˜ ์ด๋ฆ„๊ทœ์น™์„ ์ ์šฉํ•œ๋‹ค.
  1. Android์˜ View๋Š” CamelCase์˜ ๋Œ€๋ฌธ์ž๋ฅผ ์ถ•์•ฝํ•œ ํ˜•ํƒœ๋กœ ์ •ํ•œ๋‹ค. : TextView -> tv_
  2. ๋งŒ์•ฝ View์˜ ์ด๋ฆ„์ด Space, Switch์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋Œ€๋ฌธ์ž๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ชจ๋‘ ์†Œ๋ฌธ์ž์ธ ์•„์ด๋””๋กœ ์ •ํ•œ๋‹ค. : Switch -> switch_
  3. CustomView๋Š” ์ „์ฒดView์˜ ์ด๋ฆ„์„ snake case์ด๋ฆ„์œผ๋กœ ์ •ํ•œ๋‹ค. : MyCustomView -> my_custom_view (๋งŒ์•ฝ 1๊ฐœ์˜ xml์— ๊ฐ™์€ ์—ฌ๋Ÿฌ CustomView๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด <WHAT>_<DESCRIPTION>์˜ ํ˜•ํƒœ๋กœ ์ •ํ•œ๋‹ค.)
  4. ์•„๋ž˜ํ‘œ์— ํ•ด๋‹น View์˜ Prefix๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ํŒ€์—์„œ ์ƒ์˜ํ•ด์„œ ์ด๋ฆ„์„ ์ •ํ•œ๋’ค ์ถ”๊ฐ€ํ•œ๋‹ค.

WHAT

View Prefix
TextView tv_
ImageView iv_
CheckBox cb_
RecyclerView rv_
EditText et_
ProgressBar pb_
FrameLayout fl_
NestedScrollView nsv_
Space space_
Switch switch
AbcDeFgh adf_
Abcdef abcdef_
MyCustomView my_custom_view
YourView your_view

๊ธฐํƒ€

  • ํ•ด๋‹น View๋ฅผ ํŠน์ •๊ธฐ๋Šฅ๊ณผ ์ƒ๊ด€์—†์ด VISIBLE/GONE๋“ฑ์˜ View์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด view_xxx๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ๋„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ๋ฒ„ํŠผ๊ธฐ๋Šฅ์„ ์œ„ํ•œ View๋Š” ImageView, TextView๋กœ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. (Button, ImageButton์€ ์กด์žฌ์˜ ์˜๋ฏธ๊ฐ€ ์—†์Œ)
  • ํŠน์ • ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์ œ๋ชฉ : tv__label [์˜ˆ์‹œ]
  • CardView๋‚˜ Fragment ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ์—๋Š” tv_title / tv_description

์˜ˆ์‹œ

  • iv_close: ๋‹ซ๊ธฐ ImageView
  • tv_select: ์„ ํƒ TextView
  • rv_car_list: ์ž๋™์ฐจ ๋ชฉ๋ก RecyclerView
  • view_etc_model: ๊ธฐํƒ€ ๋ชจ๋ธ ํ™”๋ฉด LinearLayout

Drawable

  • <WHAT>(_<WHERE>)_<DESCRIPTION>(_<SIZE>)
  • ์ด๋ฏธ์ง€๊ฐ€ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ํ™œ์šฉ๋  ๊ฒฝ์šฐ, <WHERE>๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ 1๊ฐœ๋ฐ–์— ์—†๋Š” ๊ฒฝ์šฐ, <SIZE>๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค.

What

Prefix ์„ค๋ช…
btn_ ๋ฒ„ํŠผ์œผ๋กœ ์“ฐ์ด๋Š” ์ด๋ฏธ์ง€
ic_ ๋ฒ„ํŠผ์ด ์•„๋‹Œ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ์ด๋ฏธ์ง€
bg_ ๋ฒ„ํŠผ์ด ์•„๋‹Œ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ์ด๋ฏธ์ง€
img_ ์‹ค์ œ์‚ฌ์ง„์ด๊ฑฐ๋‚˜ ์•„์ด์ฝ˜ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์ผ๋Ÿฌ์ŠคํŠธํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€
div_ divider๋กœ ํ™œ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€

Selector

  • ๋ฐฐ๊ฒฝ์ด๋‚˜ ๋ฒ„ํŠผ์—์„œ View์˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ drawable์ด ๋ณ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ด๋ฆ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
์ƒํƒœ Suffix
Normal _normal
Pressed _pressed
Focused _focused
Disabled _disabled
Selected _selected

Background

  • ๋ฐฐ๊ฒฝ์ƒ‰์ด pressed์ƒํƒœ์— ๋”ฐ๋ผ์„œ white -> sky_blue๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” bg_white_to_sky_blue.xml๋กœ ํ•œ๋‹ค.
  • ๋ฐฐ๊ฒฝ์ด white์ƒ‰์˜ 24dp๋กœ corner ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋Š” bg_white_radius_24dp.xml๋กœ ํ•œ๋‹ค.
  • ๋ฐฐ๊ฒฝ์ด ํˆฌ๋ช…ํ•˜๋ฉฐ ๋ฐฐ๊ฒฝ์˜ ์„ ๋งŒ์„ sky_blue์ƒ‰์˜ 8dp๋กœ corner ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋Š” bg_stroke_sky_blue_radius_8dp.xml๋กœ ํ•œ๋‹ค.

๊ธฐํƒ€

  • img_xxx์˜ ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ tinypng์—์„œ ํŒŒ์ผํฌ๊ธฐ๋ฅผ ์ค„์ธ๋’ค์— ์ถ”๊ฐ€ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (GitHub imgbot์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ)
    • ๋Œ€๋ถ€๋ถ„ ์šฉ๋Ÿ‰์ด ํฐ ํŒŒ์ผ์ด์–ด์„œ xxxhdpi์—๋งŒ ๋„ฃ๋Š”๋‹ค.

์˜ˆ์‹œ

  • btn_call_normal.png: ์ „ํ™”๊ฑธ๊ธฐ ๋ฒ„ํŠผ ์ด๋ฏธ์ง€
  • btn_call_pressed.png: ์ „ํ™”๊ฑธ๊ธฐ ๋ฒ„ํŠผ ๋ˆŒ๋ ธ์„๋•Œ์˜ ์ด๋ฏธ์ง€
  • btn_call.xml: ์ „ํ™”๊ฑธ๊ธฐ ๋ฒ„ํŠผ ์ด๋ฏธ์ง€์˜ selector xml
  • ic_dealer_gift.png: ๋”œ๋Ÿฌ๊ฐ€ ๋ณด๋‚ด์ค€ ๊ธฐํ”„ํ‹ฐ์ฝ˜์„ ๋ณด์—ฌ์ค„๋•Œ ํ‘œ์‹œ๋˜๋Š” ์ด๋ฏธ์ง€
  • img_splash_chart.png: ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๋Š” ์ฐจํŠธ ์ด๋ฏธ์ง€

String

  • <WHERE>_<DESCRIPTION>
  • ํŠน์ •ํ™”๋ฉด์—์„œ ์“ฐ์ด๋Š” ํ…์ŠคํŠธ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ๊ณตํ†ต์œผ๋กœ ์žฌ์‚ฌ์šฉ๋  ํ…์ŠคํŠธ๋ผ๋ฉด all_<DESCRIPTION>๋กœ ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค

์˜ˆ์‹œ

  • permission_dialog_camera_title: ์นด๋ฉ”๋ผ๊ถŒํ•œ์„ ์š”๊ตฌํ•˜๋Š” Dialog์˜ ์ œ๋ชฉ
  • permission_dialog_camera_description: ์นด๋ฉ”๋ผ๊ถŒํ•œ์„ ์š”๊ตฌํ•˜๋Š” Dialog์˜ ์„ค๋ช…๋‚ด์šฉ
  • all_yes: ๋„ค
  • all_ok_understand: ์—ฌ๋Ÿฌ Dialog์—์„œ ๋„ค, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค๋กœ ์“ฐ์ด๋Š” ๊ณตํ†ต์˜ ํ…์ŠคํŠธ

๋ฌธ๋‹จ

  • ๋ฌธ๋‹จํ˜•ํƒœ์˜ ๊ธด ๋ฌธ์ž์—ด๋กœ ๊ฐœํ–‰(\n)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, \n์„ ๋‹ค์Œ์ค„์˜ ์•ž์— ์“ด๋‹ค.
 <string name="sample">๋ฌธ๋‹จ ์ฒซ๋ฒˆ์งธ์ค„
        \n๋ฌธ๋‹จ ๋‘๋ฒˆ์งธ์ค„
        \n๋ฌธ๋‹จ ์„ธ๋ฒˆ์งธ์ค„</string>

Theme/Style

  • Theme๋Š” theme.xml, Style์€ style.xml์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • 1๋ฒˆ๋งŒ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ์—๋Š” style์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. (๋‹จ, ์•ž์œผ๋กœ ์žฌ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋Šฅ)
  • ๋ชจ๋“  style์€ parent๋ฅผ ๊ฐ–๋Š”๋‹ค.

Naming

  • style์˜ ์ด๋ฆ„์€ parent์˜ ์ด๋ฆ„ํŒจํ„ด๊ณผ ๋งž์ถ˜๋‹ค
<style name=โ€Widget.HeyDealer.Buttonโ€ parent=โ€@style/Widget.AppCompat.Buttonโ€>
...
</style>
  • parent์—์„œ ์ผ๋ถ€ ๋‚ด์šฉ๋งŒ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•˜๋Š”๊ฒฝ์šฐ, parent์ด๋ฆ„ ๋’ค์— ๋‹ฌ๋ผ์ง„ ๋‚ด์šฉ์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค
<style name="Theme.HeyDealer.Transparent" parent="Theme.HeyDealer">
...
</style>
  • Base Style๊ณผ Theme์˜ ๊ฒฝ์šฐ๋Š” ์•ž์— Base๋ฅผ ๋ถ™์ธ๋‹ค.
<style name="Base.Theme" parent="..." />
<style name="Base.Theme.Transparent">...</style>
<style name="HeyDealerTheme" parent="Base.Theme">...</style>
<style name="HeyDealerTheme.Transparent" parent="Base.Theme.Transparent" />

<style name="Base.TextAppearance.HeyDealer" parent="...">...</style>
<style name="Base.TextAppearance.HeyDealer.Headline">...</style>
<style name="TextAppearance.HeyDealer.Headline1" parent="Base.TextAppearance.HeyDealer.Headline">...</style>
<style name="TextAppearance.HeyDealer.Headline2" parent="Base.TextAppearance.HeyDealer.Headline">...</style>

Attribute

  • Attribute์ด๋ฆ„์€ camelCase๋กœ ํ•œ๋‹ค.
<attr name="numStars" format="integer" />
  • ๊ธฐ์กด์— ์ •์˜๋˜์–ด์žˆ๋Š” android:xxx์™€ ๊ฐ™์€ ๋™์ž‘์„ ์œ ๋„ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด tag๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
<declare-styleable name="SpannedGridLayoutManager">  
 <attr name="android:orientation" />  
...
</declare-styleable>

๊ธฐํƒ€

  • android:xxxLeft/android:xxxRight ๋Œ€์‹  android:xxxStart/android:xxxEnd๋กœ ์‚ฌ์šฉํ•œ๋‹ค.(๊ธฐํƒ€ Left/Right๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„ ๋ชจ๋‘)

โœ๏ธ BEEP Tech Blog

๋ฐ•๋ช…๋ฒ”

์–‘์ˆ˜์ง„

๊น€๋ช…์„

์ด์ง€ํ›ˆ

๐Ÿ‘พ BEEP

๐Ÿ—ฃ Ground Rule

โœ๏ธ Conventions

โš™๏ธ Setting

๐ŸŒฑ Daily Scrum

week 1
week 2
week 3
week 4
week 5
week 6
Clone this wiki locally