naver campus hackday winter 2017 참가 후기
TRANSCRIPT
왜�갔어요?• 동아리�Slack�#feeds�채널에�핵데이�한다고�뜸.�
• Slack�좀�씁시다�여러분.�
• 학과�워크샵을�갔는데�강연하러�나온�네이버에�막�들어간�선배가�강연�끝에�가보라고�추천을�하심.�
• 그래서�일단�신청함�-�딱히�기대�안함�
• 참가자로�선발됨(!)
팀�멘토님�:�제가�영빈님�2학년인데�뽑은�이유가...�이거�한번�봐요,�이거�보고�뽑았어요.�
옆에�있던�팀원분�:�와...�저렇게�하기�쉽지�않은데...�(참고로�나머지�팀원은�모두�3~4학년)
어짜다�보니�Android�앱�담당을...
• 팀원0�-�전�서버�선호...�Android�몰라요...�
• 팀원1�-�저도�서버...�Android�모르고�iOS�는�함.�
• 팀원2�-�전�서버,�근데�Android�도�함.�
• 나�-�Android�쪽에�붙어야겠네...
그래서...
• 팀원0�-�서버�
• 팀원1�-�서버�+�iOS�판매자용�앱�작업�
• 팀원2�-�Android�일반�사용자용�앱�작업�
• 나�-�Android�일반�사용자용�앱�작업
현실.
• 팀원0�-�서버�
• 팀원1�-�서버�하시다가�Android�앱�판매자쪽으로...�
• 팀원2�-�Android�사용자�부분�작업�
• 나�-�Android�사용자�부분�작업
사전작업�-�코딩
• Android�쪽만�미리�작업�-�UI�만�미리�부분적으로�작업�
• (비어있는)�메인화면�
• QR�코드�스캔�화면�-�걍�라이브러리�가져다�씀�
• 스캔�결과�처리�
• 결제�완료�화면
일정
자~�버스�타실꺼구요~�내리셔서�짐�풀으시고,�개발하다가,�먹고,�개발하다가,�밥먹고,�개발하다가,�자고,�개발하다가,�먹고,�개발하다가,�먹고,�개발하다가.........�
자�일정�다른건�보실�필요�없고,�밥�시간만�잘�기억하시면�됩니다.
첫날�작업(내�작업�위주로�설명하자면.)
• 간식�사수�(멘토�:�여러분!�간식이�털리고�있습니다.�사수�하러�갑시다!)�
• 앱�화면�세부�기획�+�작업�
• 결제�기능�-�결제�인증(비밀번호�입력�화면)�추가�
• 구매내역�-�구매�기록,�기록별�상세,�충전/환불�
• 로그인/회원가입�-�이건�다른분이�작업�
• 메인화면�작업�-�다같이�작업�
• 저녁식사,�커넥트원�구경,�배드민턴�치기(본인�포함�팀원�모두가�몸치)
둘쨋날(마지막날)• UI�작업�마무리�
• 앱과�서버�연동�작업�+�추가�UI�작업(충전�화면)�
• QR코드�스캔�처리�구현�작업�
• QR�스캐너�라이브러리�교체�작업�
• 서버�하시던�분�한명�->�앱�판매자�기능�구현�으로�넘어오심�
• 2시쯤�마무리.�각자�작업한�부분에�대해�발표.
Kotlin�Android�Extension• JavaButton�myButton�=�(Button)�findViewById(R.id.button);�
TextView�title�=�(TextView)�findViewById(R.id.title);�
�
myButton.setOnClickListener(new�View.OnClickListener(){�
@Override�
public�void�onClick(View�v){�
//�Handle�button�click�event�
}�
});
Kotlin�Android�Extension• Java(+lambda�expression)Button�myButton�=�(Button)�findViewById(R.id.button);�
TextView�title�=�(TextView)�findViewById(R.id.title);�
�
myButton.setOnClickListener((View�v)�->�{�
//�Handle�button�click�event�
}�
);
Kotlin�Android�Extension• Kotlin(+Kotlin�Android�Extension,�lambda)
button.setOnClickListener{�
//�Handle�button�click�event�
}
Data�class
• 데이터만�가지고�메소드는�없는�클래스�만들�때�편리함.
//�Example�
data�class�Contact(val�name:�String,�val�phone:�String)
Threading
• Java
Thread�thread�=�new�Thread(){�
()->{�
//�Handle�background�task�
}�
}�
thread.start();
khttp�-�HTTP�without�the�bullshit
import�khttp.get�
fun�main(args:�Array<out�String>)�{�
����//�Get�our�IP�
����println(get("http://httpbin.org/ip").jsonObject.getString("origin"))�
����//�Get�our�IP�in�a�simpler�way�
����println(get("http://icanhazip.com").text)�
}
면접
• 총�2시간(인데�시간�초과해서�실제로는�2시간�반)�
• 면접관�두분이�순서대로�한분씩만�들어와서�한시간씩�진행�
• 핵데이때�한�것,�제출한�서류,�지원한�직무�관련�하여�질문�
• 지원한�직무에�대해�굉장히�깊게�질문함.�
• 면접관�한분마다�손코딩�3~4문제�정도
대충�기억나는�질문�나열
• Final�키워드에�대한�질문�
• Object�클래스에�구현된�메소드�들을�설명해�보세요.�
• StringBuilder,�StringBuffer�의�차이는?�
• 싱글톤�패턴�알아요?�디자인�패턴�아는거�있어요?�
• 멀티스레딩�관련�질문.
대충�기억나는�질문�나열• Android�BroadcastReceiver�를�등록하는�방법은?�
• 답�:�동적으로�등록�또는�메니페스트에�명시하여�등록�
• 둘의�차이는?�메니페스트에�등록하면�편한데�왜�메소드를�호출해서�동적으로�등록할까요?�
• 인텐트�필터가�뭐하는�건가요?�
• Android�에�있는�기본�컴포넌트�유형에�대해서�설명해�보세요.�
• 서비스를�시작하는�방법은?�답�:�그냥�startService()�또는�Activity�에�bindService().�
• 서비스�바인드를�왜�할까요?�액티비티에�붙어서�하는거면�굳이�왜하죠?�
• View�가�어떻게�그려지나요?�ViewGroup�은�어때요?
손코딩• 문자열�뒤집기�-�StringBuilder�를�사용하자�:�왜�StringBuilder�를�사용했어요?�
• 배열에서�중복되는�것만�출력하기�-�HashMap�Key�로�Integer�를�사용하자�:�int�로는�안되나요?�
• 수열의�n�번째�항�구하는�함수�만들기�
• 배열에�있는�항목�정렬하기�
• 정렬�공부를�안해서(...)�그나마�아는�버블�정렬로�작성�하자�:�이거�시간�복잡도가�어떻게�될까요?�
• Android�레퍼런스�문서�인쇄한�것과�Android�View�Tree�그림을�던져주며.�-�View�Tree�의�최대�깊이를�구하는�함수�만들기.�
• 몇게�더�있던�거�같은데�기억이�안남...�
• 면접관�:�음...�저�코드가�제대로�작동할까요?�(휴대전화�카메라로�보드에�쓴�코드를�연속촬영하며)
결론• Naver�Campus�Hackday�정말�좋았음�
• 시설도�좋고,�나오는�음식도�좋고,�숙소도�좋고,�하루종일�코딩하고,�삽질도�해보고,�새로운�것도�배우고...�
• 우수�참가자가�되어�네이버�면접�보는건�상상도�못함.�
• 면접가서�탈탈탈탈�털리고�온건�함정.�
• 탈락�했지만,�면접�본것�만으로도�충분히�좋은�경험이였음.�
• 내가�아직�공부할�것이�한참�많아�남았다는�것을�느낌.�
• 그러니까�너님들도�GitHub[깃허브,�짓허브�아님.]�열씸히�하고...�핵데이�같은것도�가보고�해봐요...�좋음...�포트폴리오거리도�쌓임...