ȸ¿ø·Î±×ÀÎ
13³â Àü
key ÆÄÀÏÀÇ ³»¿ëº¸±â : keytool -list -v -keystore app_v10.key
* WebView Download
http://sdop.egloos.com/3630690
setDownloadListener
* ListView ¼±Åà ÈÄ ½ºÅ©·Ñ ½Ã Àüü ¸®½ºÆ® °ËÁ¤ ȸéÀ¸·Î ¹Ù²î¸é¼ ½ºÅ©·Ñ µÇ´Â Çö»ó
http://android-developers.blogspot.com/2009/01/why-is-my-list-black-android.html
¿ä¾àÇϸé android:cacheColorHint¸¦ ÁöÁ¤ÇÏ½Ã¸é µË´Ï´Ù.
* usim, ÀüȹøÈ£(MDN) ±¸Çϱâ: android.telephony ÆÐÅ°Áö Âü°í
http://d.android.com/reference/android/telephony/TelephonyManager.html#getLine1Number()
Âü°íÇϽñ⠹ٶø´Ï´Ù. READ_PHONE_STATE Æ۹̼ÇÀÌ ÇÊ¿äÇÕ´Ï´Ù
* TelephoneyManager ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í : http://icess.egloos.com/3279459
### ȸé Å©±â
mWinMgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
int displayWidth = mWinMgr.getDefaultDisplay().getWidth();
#### wifi, 3G ¿¡ ´ëÇÑ Network change
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
##################################################
# android.graphics.Camera
##################################################
3d flip È¿°ú
http://blog.paran.com/fanfare%40hitel/34356715
Transformation Matrix ¼³¸í
http://www.senocular.com/flash/tutorials/transformmatrix/
Camera.save() : ½ºÅÿ¡ maxtrix ¸¦ ³Ö´Â´Ù.
Camera.restore() : ÇöÀç transformation À» ¾ø¾Ö°í,
¸¶Áö¸· ÀúÀåµÈ »óÅÂ(½ºÅÿ¡¼ ²¨³¿)·Î µ¹¾Æ°¡ °è¼Ó ÁøÇàÇÑ´Ù.
¼ø¼
1. canvas.save();
2. transform matrix;
3. draw;
4. canvas.restore();
Canvas.save, Canvas.restore; Camera.save, Camera.restore
http://maohao.wordpress.com/category/graphics/
## Etc
Android Coverflow Widget V2
http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html
##################################################
# SMS
##################################################
#### ¼ö½ÅµÇ´Â SMS ¸¦ µû·Î ó¸®ÇÏ´Â broadcast receiver
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
BroadcastReceiver Ŭ·¡½º¸¦ »ç¿ëÇϸé
#### Âü°í
SMS¿¡ ¹ÝÀÀÇÏ´Â ÇÁ·Î±×·¥(¾Èµå·ÎÀ̵å)
http://flytop.tistory.com/62
SMS Messaging in Android (¿Ü±¹)
http://mobiforge.com/developing/story/sms-messaging-android
Inbox ³» SMS ¹®ÀÚ »èÁ¦Çϱâ
aphone ¿¡¼ °Ë»ö
##################################################
# ViewFlipper
##################################################
: In/Out ¼Ó¼ºÀ» ÁöÁ¤ÇÏ¿© View ÀÇ À̵¿À» animation ó¸®ÇÑ´Ù.
1. ·¹À̾ƿô ±¸¼º
ViewFlipper ¿¡ Æ÷Ç﵃ View ¸¦ Á¤ÀÇ
2. ¾Ö´Ï¸Þ´Ï¼Ç ±¸¼º
res/anim ¿¡ ¿øÇÏ´Â ¾Ö´Ï¸ÞÀÌ¼Ç ±¸¼º
3. ÄÚµå ±¸¼º
mFilpper = (ViewFlipper)this.findVeiwById(R.id.flipper)
mFilpper.startFlipping();
mFilpper.setInAnimation(...);
mFilpper.setOutAnimation(...);
* ¼±¾ðÇÑ ºä¸¦ class·Î ¸ÅÇÎ
flipper = (ViewFlipper)findViewById(R.id.flipper);
title = (Title)flipper.getChildAt(0);
menu = (Menu)flipper.getChildAt(1);
game = (Game)flipper.getChildAt(2);
* ¿øÇÏ´Â ºä¸¦ ȸ鿡 ³ªÅ¸³»±â
flipper.setDisplayedChild(2);
* Âü°í»çÇ×
setContentViewȤÀº layoutinflate¸¦ ÇÏ´Â ½ÃÁ¡¿¡ ¸ðµç ºä°¡ »ý¼ºÀÌ µÇ°í ȸ鿡 º¸ÀÌ´Â ¿©ºÎ¿Í »ó°ü¾øÀÌ
Á¾·áÇÒ¶§±îÁö´Â °è¼Ó »ì¾Æ Àֱ⠶§¹®¿¡ ƯÁ¤ view¸¦ º¸À϶§ Ãʱâȸ¦ ÇÑ´ÙµçÁö ÇÏ´Â°Ç ¾Ë¾Æ¼ ÇØÁà¾ßÇÔ
(º°µµÀÇ overridingÇÒ method°°Àº°Ç ´ç¿¬È÷ Á¦°øµÇÁö ¾ÊÀ½)
## À̺¥Æ® ó¸®
http://tigerwoods.tistory.com/23
OnTouchListener ÀÎÅÍÆäÀ̽ºÀÇ ±¸Çö
ȸ鿡 ÀϾ´Â touch¸¦ °¨ÁöÇϱâ À§Çؼ´Â android.view.View.OnTouchListener interface¸¦ ±¸ÇöÇÏ¿©¾ß ÇÑ´Ù.
OnTouchListener ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°Àº abstract callback method¸¦ Æ÷ÇÔ ÇÔÀ¸·Î ±¸ÇöÇØ ÁÖ¾î¾ß ÇÑ´Ù.
Animation ¸®¼Ò½ºÀÇ »ç¿ë
push_left_in.xml: »õ·Î¿î view°¡ ¿ÞÂÊ ¹æÇâÀ¸·Î ¹Ð·Á µé¾î¿È.
push_left_out.xml: ±âÁ¸ view°¡ ¿ÞÂÊ ¹æÇâÀ¸·Î ¹Ð·Á ³ª°¨.
push_right_in.xml: »õ·Î¿î view°¡ ¿À¸¥ÂÊ ¹æÇâÀ¸·Î ¹Ð·Á µé¾î¿È.
push_right_out.xml: ±âÁ¸ view°¡ ¿À¸¥ÂÊ ¹æÇâÀ¸·Î ¹Ð·Á ³ª°¨.
<translate>
»óÇÏÁ¿ì À̵¿ animationÀ» ÁöÁ¤Çϸç. TranslateAnimation Ŭ·¡½º¿¡ ´ëÀÀÇÑ´Ù.
<alpha>
Åõ¸íÇÔÀ» Á¶Á¤Çϸç, AlphaAnimation Ŭ·¡½º¿¡ ´ëÀÀÇÑ´Ù.
Java code¿¡¼ ViewFlipper °´Ã¼ÀÇ »ç¿ë
View:addView(View): layout xml ¹®¼ ³»ºÎÀÇ ViewFlipper element¿¡ nestµÈ view ÀÌ¿Ü¿¡ »õ·Î¿î view¸¦ µ¿ÀûÀ¸·Î Ãß°¡ÇÑ´Ù.
ViewAnimator:setInAnimation(Context, int): »õ·Î¿î view°¡ ȸ鿡 ÁøÀÔ½ÃÀÇ animation ¼³Á¤
ViewAnimator:setOutAnimation(Context, int): ±âÁ¸ view°¡ ȸ鿡¼ ÅðÀå½ÃÀÇ animation ¼³Á¤
ViewAnimator:showNext(): ViewFlipper¿¡ µî·ÏµÈ viewÁß ÇöÀç viewÀÇ ´ÙÀ½ view¸¦ ȸ鿡 º¸ÀÌ°Ô ÇÔ
ViewAnimator:showPrevious(): ViewFlipper¿¡ µî·ÏµÈ viewÁß ÇöÀç viewÀÇ Àü view¸¦ ȸ鿡 º¸ÀÌ°Ô ÇÔ
ViewFlipper:setFlipInterval(int): ÀÚµ¿ flipping½Ã Àû¿ëÇÒ ½Ã°£°£°Ý (1/1000ÃÊ ´ÜÀ§ »ç¿ë)
ViewFlipper:startFlipping(): ¼³Á¤µÈ ½Ã°£°£°ÝÀ» Àû¿ëÇØ ÀÚµ¿ flipping ½ÃÀÛ ÇÔ
ViewFlipper:stopFlipping(): ÀÚµ¿ flippingÀ» Á¤Áö ÇÔ
ViewSwitcher : ViewFlipper¿Í µ¿ÀÏ
##################################################
# Thread
##################################################
¾Èµå·ÎÀ̵å 021: Thread ±¸ÇöÇϱâ 2/2 (with AsyncTask & ProgressBar)
http://tigerwoods.tistory.com/28
Thread - Handler and Looper
http://skyswim42.egloos.com/3546223
[¹ø¿ª¿Ï·á]Talking about Android Message Queue
http://blog.naver.com/osk1004?Redirect=Log&logNo=50068938534
¾Èµå·ÎÀ̵å Key/Touch event dispatch °úÁ¤
http://cafe.naver.com/05cmusa2.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=385
==> Ãß°¡ ³»¿ë
android UI thread, painless threading
http://sdop.egloos.com/3600978
UI °ü·Ã ÇàÀ§´Â UI Thread(Main Thread)¿¡¼ ¼öÇàÇؾßÇÑ´Ù
Android - UI Thread¿Í Handler
http://www.cyworld.com/thespeedofpain/2653453
'view ±¸Á¶¸¦ »ý¼ºÇÑ ¾²·¹µå¿¡¼¸¸ ±× view¸¦ °Çµå¸± ¼ö ÀÖ´Ù
'android.os.Handler' class¸¦ È°¿ëÇÑ´Ù
- job queue ·Î ¼·Î ÁÖ°í ¹ÞÀ½
Android App - Using threads and ProgressDialog Âü°í
* Networking with Android
http://blog.naver.com/davincigo?Redirect=Log&logNo=60103780004
public class Requester extends Thread {
Socket requestSocket;
String message;
StringBuilder returnStringBuffer = new StringBuilder();
Message lmsg;
int ch;
@Override
public void run() {
try {
this.requestSocket = new Socket("remote.servername.com", 13);
InputStreamReader isr = new InputStreamReader(this.requestSocket.
getInputStream(), "ISO-8859-1");
while ((this.ch = isr.read()) != -1) {
this.returnStringBuffer.append((char) this.ch);
}
this.message = this.returnStringBuffer.toString();
this.lmsg = new Message();
this.lmsg.obj = this.message;
this.lmsg.what = 0;
h.sendMessage(this.lmsg);
this.requestSocket.close();
} catch (Exception ee) {
Log.d("sample application", "failed to read data" + ee.getMessage());
}
}
}
##################################################
Android - Updating UI On UI Thread
http://escomic.net/211
Android¿¡¼µµ UI°ü·Ã ÇàÀ§´Â UI ThreadÀ§¿¡¼ ÇؾßÇÑ´Ù
±×·¸Áö ¾ÊÀ¸¸é ¾Æ·¡¿Í °°Àº ExceptionÀÌ ¹ß»ýÇÑ´Ù
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created .....
SwingÀÇ SwingUtilities.invokeLater(Runnable r)¿Í °°Àº ¿ªÇÒÀ» ÇÏ´Â ¾Æ·¡ÀÇ ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÇØ°áÇÒ¼ö ÀÖ´Ù
Activity.runOnUiThread(Runnable action)
View.post(Runnable action)
View.postDelayed(Runnable action, long delayMillis)
Handler.post(Runnable action)
##################################################
Android¿¡¼ÀÇ TCP/IP Åë½Å
http://blog.naver.com/davincigo?Redirect=Log&logNo=60103774153
Grab a URL Source with ProgressDialog and AsyncTask
http://www.androidsnippets.org/snippets/116/
Handler¸¦ ½á¾ß ÇÕ´Ï´Ù.
http://www.androidpub.com/?_filter=search&mid=android_dev_info&search_target=title&search_keyword=Handler&document_srl=57470
¹Ìµð¾î °¶·¯¸®
http://developer.android.com/reference/android/content/Intent.html#ACTION_SEND
http://modian.tistory.com/entry/Gallery-Camera-»ç¿ë
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE : Broadcast Action: Request the media scanner to scan a file and add it to the media database.
##################################################
# SurfaceView
##################################################
[ ¾Èµå·ÎÀÌµå °³¹ß 2.0 ] ±×·¡ÇÈ 2D 1 - ¾Èµå·ÎÀÌµå ¾ÆÀÌÄÜ ¶ç¿ì±â, Ä¿½ºÅÒºä È°¿ë
http://moozi.tistory.com/80
[ ¾Èµå·ÎÀÌµå °³¹ß 2.0 ] ±×·¡ÇÈ 2D 2 - SurfaceView È°¿ë 1
http://moozi.tistory.com/81
[ ¾Èµå·ÎÀÌµå °³¹ß 2.0 ] ±×·¡ÇÈ 2D 3 - SurfaceView È°¿ë 2
http://moozi.tistory.com/82
* ½ºÅ©¸° »çÀÌÁî º¯°æ½Ã Call Back ÇÔ¼ö¸¦ È£ÃâÇÔ
View ¿¡¼ ±×¸®±â
1) View »ó¼Ó Ŭ·¡½º »ý¼º
2) onDraw() ¿À¹ö¶óÀ̵ù
3) invalidate() È£Ãâ
SurfaceView ¿¡¼ ±×¸®±â
1) SurfaceHolder.lockCanvas() ¿Í SurfaceHolder.unlockCnavasAndPost() ¸¦
ÀÌ¿ëÇÏ¿© ȸéÀ» °»½ÅÇÔ
##################################################
# Android »ç¿ëÀÚ Ä¿½ºÅÒºä
##################################################
android¿¡¼ À̹ÌÁöºä Drag Çغ¸±â
http://blog.naver.com/eriteia?Redirect=Log&logNo=10077769956
Create Custom Widget : http://developer.android.com/guide/topics/ui/custom-components.html (¿ø¹®)
±âº»ÀûÀÎ Á¢±Ù
1. View¶Ç´Â ±âÁ¸ »ý¼ºÇÑ Å¬·¡½º¸¦ »ó¼Ó(Extends) ¹Þ´Â´Ù.
2. »óÀ§ Ŭ·¡½º(Super Class)ÀÇ ¸Þ¼Òµå(onXXX ¡¦) ¸¦ ¿À¹ö¶óÀ̵å ÇÑ´Ù. Ex) onDraw(), onKeyDown(), onMeasure()¡¦
3. ÀÌÁ¦ Ŭ·¡½º¸¦ »õ·Ó°Ô È®ÀåÇÑ ÀÌÈÄ ÀÌ Å¬·¡½º¸¦ ¹ÙÅÁÀ¸·Î Á»´õ È®ÀåÇØ ³ª°£´Ù.
ÂüÁ¶
onDraw () : 2D ±×·¡ÇÈÀ» ±×¸®±â À§ÇÑ ¸Þ¼Òµå
onMeasure() : WidgetÀÇ Å©±â(¿µ¿ª : Æø, ³ôÀÌ)À» ÁöÁ¤ÇÏ´Â ¸Þ¼Òµå
±âÁ¸ Á¸ÀçÇϴ Ŭ·¡½º È®Àå ¿¹½Ã
1. Á¤ÀÇ
public static class MyEditText extends EditText
2. Ŭ·¡½º ÃʱâÈ
Super¸¦ »ç¿ëÇÏ¿© »óÀ§ Ŭ·¡½º¸¦ ÃʱâÈ ÇÑ´Ù ÀÌÈÄ xml À» ÅëÇØ ·¹À̾ƿôÀ» ÃʱâÈ ÇÒ ¼ö ÀÖ´Ù.
3. ¸Þ¼Òµå ¿À¹ö¶óÀ̵å
onDraw(), onMeasure() µîÀ» ¿À¹ö¶óÀ̵ù ÇÏ¿© ¿øÇÏ´Â ÇüÅ·Π²Ù¸çÁØ´Ù.
4. Ä¿½ºÅÒ ÄÄÆ÷³ÍÆ® »ç¿ë
<view
class="com.android.notepad.NoteEditor$MyEditText"
id="@+id/note"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:drawable/empty"
android:padding="10dip"
android:scrollbars="vertical"
android:fadingEdge="vertical" />
* IMSI, ÇÚµåÆù ¹øÈ£ ¾Ë¾Æ¿À±â
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String imsi = mTelephonyMgr.getSubscriberId();
String imei = mTelephonyMgr.getDeviceId();
String phoneNumber = mTelephonyMgr.getLine1Number();
[¾Èµå·ÎÀ̵å] Toast View ¸¸µé±â
http://blog.daum.net/hopefullife/79
##################################################
# ÀüÃ¼È¸é »ç¿ëÇϱâ (Status bar, Title bar ¼û±â±â)
##################################################
- ŸÀÌƲ¹Ù ¹× »óŹ٠¼û±â±â
* Fullscreen ÀÇ °æ¿ì Annon ¿µ¿ªÀÌ ¾ø¾îÁü (32pixel)
Âü°í : http://www.androidpub.com/4710
* AndroidManifest.xml ¿¡¼ ó¸®
<activity android:name=".MyActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
* java ¿¡¼ ó¸®
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView Àü¿¡ È£Ãâ
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(...);
##################################################
# ±âŸ
##################################################
* View ÄÁÅ×À̳ʷΠ¾²ÀÌ´Â ViewGroup µé
ViewGroup Àº Layout °ú ºñ½ÁÇÏÁö¸¸
ÀÚ±â Àڽŵµ ¾î´À Á¤µµÀÇ ±â´ÉÀ» Á¦°øÇÑ´Ù.
- Gallery, GridView, ImageSwitcher, ScrollView, TabHost, ListView µî ..
##################################################
# ¹ÙÄÚµå ó¸®
##################################################
¾Èµå·ÎÀÌµå ¹ÙÄÚµå Àνıâ(OCR) ¿ÀǼҽº zxing ºÐ¼®(by wono77)
http://blog.naver.com/wono77?Redirect=Log&logNo=140101427842
import com.google.zxing.*;
import com.google.zxing.common.ByteMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
QRCodeWriter writer = new QRCodeWriter();
try {
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
ByteMatrix matrix = writer.encode("ÇѱÛÀÔ·Â", BarcodeFormat.QR_CODE, 230, 230, hints);
MatrixToImageWriter.writeToFile(matrix , "png", new File("d:/test1.png"));
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
¾Èµå·ÎÀÌµå ¹ÙÄÚµå Àνıâ(OCR) ¿ÀǼҽº zxing ºÐ¼®(by wono77)
http://blog.naver.com/wono77?Redirect=Log&logNo=140101427842
1. ByteMatrix ¸¦ ±¸ÇÑ´Ù.
2. int[] pixels = new int[width * height]; ¸¦ ¸¸µç´Ù.
3. android.graphics.Bitmap À¸·Î ÀúÀåÇÑ´Ù.
ByteMatrix result = new MultiFormatWriter().encode(contents, format,
pixelResolution, pixelResolution);
int width = result.getWidth();
int height = result.getHeight();
byte[][] array = result.getArray();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int grey = array[y][x] & 0xff;
// pixels[y * width + x] = (0xff << 24) | (grey << 16) | (grey << 8) | grey;
pixels[y * width + x] = 0xff000000 | (0x00010101 * grey);
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
##################################################
# °³¹ß ±ÔÄ¢
##################################################
* member º¯¼ö¿¡ prefix ·Î m À» ºÙÀÌ´Â°Ç ¾î¶³Áö?
* SQLite
- ±âº»Å°´Â Çʵå À̸§¿¡ _(¾ð´õ¶óÀÎ)À» ºÙÀδÙ.
ex) notes Å×À̺í : _id, title, body ÀÇ 3°³ Çʵå·Î ±¸¼ºµÊ
* À̹ÌÁö´Â ¿µ¹® ¼Ò¹®ÀÚ, ¼ýÀÚ, ¾ð´õ¶óÀÎ(_) ¸¸ °¡´ÉÇÔ
* Åõ¸í À̹ÌÁö´Â png ³ª gif ·Î ÀúÀåÇÒ °Í
##################################################
# View Å©±â(Dimension) ÁöÁ¤ ´ÜÀ§
##################################################
px (pixels) : ½ÇÁ¦ ȸé Çȼ¿
sp (scaled pixels - best for test size) : °¡º¯ ±Û²Ã Ç¥½Ã¿¡ ÃÖÀûÀÓ
pt (points) : ±ÛÀÚ Å©±â ´ÜÀ§
dip (device independent pixels) : 160dpi ȸéÀ» ±âÁØÀ¸·Î ÇÑ Çȼ¿ ´ÜÀ§
- ¹öÆ°, ¸Þ´ºµî width ÁöÁ¤
in (inches) : ¹°¸®Àû ±æÀÌ
mm (millimeters) : ¹°¸®Àû ±æÀÌ
em : TextView ¿¡¼ ÅؽºÆ®ÀÇ Ç¥½Ã·®À» ±Û²Ã¿¡ ¹«°üÇÏ°Ô Á¦¾îÇÒ¶§ À¯¿ë
##################################################
# »ï¼º¾Èµå·ÎÀ̵åÆù - M100S ¸®ºä
##################################################
»ï¼º¾Èµå·ÎÀ̵åÆù ¸®ºä#1 : »ï¼º¾Èµå·ÎÀ̵åÆù °¡°Ý,µðÀÚÀÎ ¹× ¾ÆÀÌÆù°ú ÅÍÄ¡°¨ ºñ±³
- http://blog.naver.com/clie701/110081285012
»ï¼º¾Èµå·ÎÀ̵åÆù ¸®ºä#2 : ÀÎÅÍ³Ý ¼Óµµ ¹× ¾Èµå·ÎÀÌµå ¾Èµå·ÎÀÌµå ¾îÇø®ÄÉÀ̼ÇÀÇ...
- http://blog.naver.com/clie701/110081381001
##################################################
# µµ¼ ¸®ºä
##################################################
¾Èµå·ÎÀÌµå °³¹ß, ¾î¶»°Ô ½ÃÀÛÇÏ´Â°Ô ÁÁÀ»±î?
- http://nopdin.tistory.com/699
ÇüÈ ÃßÀü ¼Àû
1. ÃʱÞ
½ÃÀÛÇϼ¼¿ä ¾Èµå·ÎÀ̵å ÇÁ·Î±×·¡¹Ö
2. ÃÊ+Áß±Þ
¾ËÂ¥¸¸ °ñ¶ó ¹è¿ì´Â ¾Èµå·ÎÀ̵å ÇÁ·Î±×·¡¹Ö
ÇÁ·ÎÆä¼Å³Î ¾Èµå·ÎÀ̵å ÇÁ·Î±×·¡¹Ö(ÀÏ¸í »¡°£Ã¥)
̵̧ : 2254
̵̧
¸ñ·Ï