# 2.코드스타일 레벨업

### 2.1 매직넘버를 상수로 대체

* 무의미한 내용 대신 **의미 있는 상수로 대체**

```java
if (speedPreset == 2){
// ..
} else if(speedPreset == 1){
// ..
} else if(speedPreset == 0) {
// ..
}
```

```java
private static final int STOP_PRESET = 0;
private static final int PLANETARY_SPEED_PRESET = 1;
private static final int CRUISE_SPEED_PRESET = 2;
```

### 2.2 정수 상수 대신 열거형

* 상수 -> **enum 대체 검토**

```java
enum SpeedPreset {
  STOP(0), PLANETRAY(1), CRUISE(2);
}
```

### 2.3 For루프 대신 Foreach

* 람다 고려

### 2.4 순회하며 컬렉션 수정하지 않기

* 사이즈 변경, 값변경 -> 예상치 못한 결과가 나올 수 있음
* 컬렉션 순회 동안 그 컬렉션 수정 -> ConcurrentModificationException 예외 발생

```java
class Inventory{
  private List<Supply> supplies = new ArrayList<>();
  
  void disposeCOntaminatedSupplies() {
    for (Supply supply : supplies) {
      if (supply.isContaminated()){
        supplies.remove(supply); // 금지 !! 이러면 망함
      }
    }
  }
}
```

* 먼저 순회 -> 순회 후 수정(삭제)

```java
// Iterator를 활용하면 괜찮음
  void disposeCOntaminatedSupplies() {
    Iterator<Supply> iter = supplies.iterator();
    while (iter.hasNext()) {
      if (iter.next().isContaminated()){
        iterator.remove(); 
      }
    }
  }
```
