[android] Effective java with Kotiln

item 3. 생성자에 매개 변수가 많다면 빌더를 고려해라

NutitionFacts cocCola = 
  new NutiritionFacts(240,8,100,0,35,27)

Java 빈즈 패턴

NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize(240);
cocaCola.setSodium(35);
cocaCola.setCarbohydrate(27);
NutirionFacts cocaCola = new NutritionFacts
.Builder(240,8)
.calories(100)
.sodium(35)
.build();

Kotiln

class NutritionFacts{
  private val servingSize : Int,
  private val servings : Int,
  private val calories : Int = 0,
  private val fat : Int = 0,
  private val sodium : Int = 0,
  private val carbohydrate : Int = 0
}
val nutirtionFacts = NutirionFacts(
servingSize = 240,
servings = 8,
calories = 100,
fat = 0,
sodium = 35,
carbohydrate = 27
)
object Elvis{
	fun leaveTheBuilding(){
		println("Whoa baby, i'm ouuta here");
	}
}

object 키워드로 싱글톤 객체를 간단히 생성

Item 4. 인스턴스화를 막으려거든 private 생성자를 사용하라. -> 인스턴스화를 막을 목적이 유틸클래스라면 Top Level function 을 사용하자.

Item 18.상속보다는 컴포지션을 사용하라.

class 

Item 19. 상속을 고려해 설계하고 문서화하라. 상속이 필요한 이유가 있을 때만 상속을 허용하라. -> 상속을 고려하고 문서화 하라 그러지 않았다면 상속을 금지하라.

Item 16. public 클래스에서는 public 필드가 접근자 메서드를 사용하라. ->

public class Point {
  private double x;
  private double y;
  
  public double getX() { return x;}
  public double getY() {return y;}
  
  public void setX(double x) {
    this.x = x;
  }
  public void setY(double y){
    this.y = y;
  }
}

Item40 @Overide 를 일관되게 사용하라.

kotiln 은 override keyword를 이용하여 컴파일 에러 @Override 애너테이션을 달지않아도 오버라이딩 가능 하지만 코트린은 무조건 있어야되

private char ch = 'a';
private final char c = 'a';
private var character : Char = 'a'
private val character : Char = 'a'

final vs val

Kotiln List vs Java List(Kotinl MutableList)

item 61 박싱된 기본 타입보다는 기본 타입을 사용하라.

기본 타입 vs 박싱된 기본 타입

Kotlin에서 박싱된 기본 타입?

val a : Int = 3 //private static final int a = 3
val b : Int? = 3 //@Nullable private static fianl Integer b = 

item 10,11,12

equals는 일반 규약을 지켜 재정의하라

equals를 재정의하려거든 hashCOde도 재정의하라

toString을 항상 재정의하라.

kotlin 에서는 기본적으로 equal, hasCode ,toString 을 만든다.

item 77

예외를 무시하지 마라.

try {
  //구현 생략
} catch(Exception e){
  e.printStackTrace();
}

Checked Exception

Kotiln 에서는

Item 88 지연 초기화는 신중히 사용하라

지연 초기화

val number by lazy {
	expensiveuFunction()
}
public enum class LazyThreadSafetyMode{
  SYNCHRONIZED,
  PUBLICATION,
  NONE,
}
fun <T> lazy(
mode : LazyThreadSafetyMode,
initializer : () -> T
)

Item 31 한정적 와일드카드를 사용해. API의 유연성을 높여라

//todo