Enum
관련된 상수들을 묶어둔 것.
type - safe
같은 타입끼리만 오퍼레이션이 정의된다. (같은 타입끼리 연산 가능)
같은 타입이 아닐 경우, 오퍼레이션 메서드 실행 시 컴파일 에러가 나타난다.
불연속적이고, 값이 제한되는 것을 묶을 수 있다. (ex: 국가 코드, 화폐 단위 등)
Enum 생성 시, 입력은 대문자로 하는 것이 기본적이며, 문자 사이엔 언더바(_)를 사용한다.
Enum끼리 비교시, == 혹은 compareTo()를 사용할 수 있다.
compareTo(value):
true, false 값이 아닌, 정수를 반환한다.
- 값과 비교 값이 같은 경우: 0
- 값이 비교 값보다 클 경우: 1
- 값이 비교 값보다 작을 경우: 비교값과의 차를 반환.
클래스에 종속적일 때 보통 내부에 선언하지만, 선언 시 지저분해진다는 단점이 있다.
그럼에도 내부에 선언하는 이유는, 종속관계를 명확하게 표현이 가능하기 때문이다.
enum의 생성자를 작성하지 않을 경우, 기본 private이다.
enum의 변수는 final로 지정하자.
객체 지향적으로, 유니크한 식자가 없다. (보통은 해시코드(주소값)로 식별 가능.)
객체를 식별하는 것이 무의미 하기 때문인데, 그 이유는 그냥 값이기 때문이다.
포인터: 객체의 주소값을 이용해 값을 제어할 수 있다.
함수 내부에서 외부 변수의 값을 변경하는 데 보통 사용됨. (Call by address)
포인터를 쓰며, 값 자체를 변경할 수 있게 되었으나, pure function이 아니기 때문에 지양하는 중이다.
자바 내에서는 이러한 포인터가 없으며, 참조 타입과 primitive 타입으로 나뉘는데, 둘 다 pass by value로 동작한다.
다만 Primitive 타입은 call by value,
참조 타입은 call by reference 처럼 동작.
List<Object> list = ArrayList<>();
와 같이 선언하는 장점이 메소드와 다형성 때문이라고 하던데 혹시 다른 이유도 있나요?
업캐스팅의 효용성!
대부분 어레이 리스트가 필요한게 아님.
그냥 리스트를 쓰고싶을 뿐임..
근데 다른 리스트를 쓰고싶을 때 편리하게 변경이 가능하기 때문에
그냥 리스트에 담고 하는거임!
List에 일단 담고 ArrayLIst쓰고 싶으면 그 부분만 다운캐스팅하면 된다