|
개발 서적을 보면서 번역이 이상하고 내용이 난해한 책들도 많다. 그래도 이해하기 쉽게 책을 쓰는 것은 어려운 일이라는걸 알기에 책을 보며 화나지 않았다. 그런데 이 책을 보며!! 처음으로 화가 났다. 저자가 설명이 힘들고 표현이 부족해서가 아니라 그냥 책 자체를 쓰지 않았다. 코틀린 설명을 60페이지 정도로 끝내고 나머지는 소스코드를 붙여 책의 분량을 채워 넣었다. 나는 저자가 책을 쓰는 성의와 자질이 의심스럽다 어찌 이럴 수 있단 말인가? 이런 식이면 누구나 책을 쓰겠다. 댓글 같은걸 달아본적이 없는데 책보다가 너무 화가나서 컴퓨터 켜고 댓글을 쓴다. 많은 기대를 하고 산 책은 아니지만 너무나도 실망스럽다. "코틀린 이것만 보면 돼" 도대체 뭘 보란 말인가? 차라리 github를 가서 소스코드를 보겠다. 돈이 아까운 책이다. |
|
이 책의 목차는 괜찮은 편인 듯 하다. 목차만 보고 인터넷으로 책을 구매했다. 근데, 이 책은... 서점가서 내용을 미리보고 살지 말지 고민하길 바란다. 책의 하이라이트는 4장 안드로이드 워밍업이다. 91페이지부터 153페이지까지... 책 내용은 아래와 같은 코드들이 엄청나게 중복되어 있다. 아래와 같은 의미없는 파일의 내용이 수 차례(5회) 중복되어 있다. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number2" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number3" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number4" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number5" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> <Spinner android:id="@+id/first_number6" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/transparent" android:entries="@array/number"/> <FrameLayout android:layout_width="1dp" android:layout_height="30dp" android:layout_gravity="center_vertical" android:background="@color/colorPrimaryDark"/> </LinearLayout> MainActivity 쪽도 엄청나다. private TextView mWinInfo; private TextView mResultInfo; private Spinner mFirstGameNumber1; private Spinner mFirstGameNumber2; private Spinner mFirstGameNumber3; private Spinner mFirstGameNumber4; private Spinner mFirstGameNumber5; private Spinner mFirstGameNumber6; private Spinner mSecondGameNumber1; private Spinner mSecondGameNumber2; private Spinner mSecondGameNumber3; private Spinner mSecondGameNumber4; private Spinner mSecondGameNumber5; private Spinner mSecondGameNumber6; private Spinner mThirdGameNumber1; private Spinner mThirdGameNumber2; private Spinner mThirdGameNumber3; private Spinner mThirdGameNumber4; private Spinner mThirdGameNumber5; private Spinner mThirdGameNumber6; private Spinner mFourthGameNumber1; private Spinner mFourthGameNumber2; private Spinner mFourthGameNumber3; private Spinner mFourthGameNumber4; private Spinner mFourthGameNumber5; private Spinner mFourthGameNumber6; private Spinner mFifthGameNumber1; private Spinner mFifthGameNumber2; private Spinner mFifthGameNumber3; private Spinner mFifthGameNumber4; private Spinner mFifthGameNumber5; private Spinner mFifthGameNumber6; private Button mResetButton; private Button mResultButton; private Button mFirstRandomButton; private Button mSecondRandomButton; private Button mThirdRandomButton; private Button mFourthRandomButton; private Button mFifthRandomButton; private void setLayout() { mWinInfo = findViewById(R.id.win_text); mResultInfo = findViewById(R.id.result_text); mFirstGameNumber1 = findViewById(R.id.first_number1); mFirstGameNumber2 = findViewById(R.id.first_number2); mFirstGameNumber3 = findViewById(R.id.first_number3); mFirstGameNumber4 = findViewById(R.id.first_number4); mFirstGameNumber5 = findViewById(R.id.first_number5); mFirstGameNumber6 = findViewById(R.id.first_number6); mSecondGameNumber1 = findViewById(R.id.second_number1); mSecondGameNumber2 = findViewById(R.id.second_number2); mSecondGameNumber3 = findViewById(R.id.second_number3); mSecondGameNumber4 = findViewById(R.id.second_number4); mSecondGameNumber5 = findViewById(R.id.second_number5); mSecondGameNumber6 = findViewById(R.id.second_number6); mThirdGameNumber1 = findViewById(R.id.third_number1); mThirdGameNumber2 = findViewById(R.id.third_number2); mThirdGameNumber3 = findViewById(R.id.third_number3); mThirdGameNumber4 = findViewById(R.id.third_number4); mThirdGameNumber5 = findViewById(R.id.third_number5); mThirdGameNumber6 = findViewById(R.id.third_number6); mFourthGameNumber1 = findViewById(R.id.fourth_number1); mFourthGameNumber2 = findViewById(R.id.fourth_number2); mFourthGameNumber3 = findViewById(R.id.fourth_number3); mFourthGameNumber4 = findViewById(R.id.fourth_number4); mFourthGameNumber5 = findViewById(R.id.fourth_number5); mFourthGameNumber6 = findViewById(R.id.fourth_number6); mFifthGameNumber1 = findViewById(R.id.fifth_number1); mFifthGameNumber2 = findViewById(R.id.fifth_number2); mFifthGameNumber3 = findViewById(R.id.fifth_number3); mFifthGameNumber4 = findViewById(R.id.fifth_number4); mFifthGameNumber5 = findViewById(R.id.fifth_number5); mFifthGameNumber6 = findViewById(R.id.fifth_number6); mResetButton = findViewById(R.id.reset_button); mResultButton = findViewById(R.id.result_button); mFirstRandomButton = findViewById(R.id.first_random); mSecondRandomButton = findViewById(R.id.second_random); mThirdRandomButton = findViewById(R.id.third_random); mFourthRandomButton = findViewById(R.id.fourth_random); mFifthRandomButton = findViewById(R.id.fifth_random); } private void setListener() { mFirstGameNumber1.setOnItemSelectedListener(mItemSelectedListener); mFirstGameNumber2.setOnItemSelectedListener(mItemSelectedListener); mFirstGameNumber3.setOnItemSelectedListener(mItemSelectedListener); mFirstGameNumber4.setOnItemSelectedListener(mItemSelectedListener); mFirstGameNumber5.setOnItemSelectedListener(mItemSelectedListener); mFirstGameNumber6.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber1.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber2.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber3.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber4.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber5.setOnItemSelectedListener(mItemSelectedListener); mSecondGameNumber6.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber1.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber2.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber3.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber4.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber5.setOnItemSelectedListener(mItemSelectedListener); mThirdGameNumber6.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber1.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber2.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber3.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber4.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber5.setOnItemSelectedListener(mItemSelectedListener); mFourthGameNumber6.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber1.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber2.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber3.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber4.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber5.setOnItemSelectedListener(mItemSelectedListener); mFifthGameNumber6.setOnItemSelectedListener(mItemSelectedListener); } 너무 심했다.. 워밍업이니 예제로 이런걸 해볼 수는 있다고 생각은 한다. 하지만 별 의미도 없는 코드를 5번이나 중복해서 페이지 분량만 늘린건 충격적이었다. 이 책을 구매하고자 하는 사람들은 도서관이나 서점에서 직접 책을 훑어보고 구매하길 바란다. |