: 연관되어있는 상수의 집합
class Fruit {
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
// 같은 데이터타입Fruit이지만 값은 서로 다른 인스턴스를 갖고있다.(new에 의해)
// interface에서 변수를 작성한다는 것 = public final static이 암시되어 있는 것
}
class Company {
public static final Fruit GOOGLE = new Company();
public static final Fruit APPLE = new Company();
public static final Fruit ORACLE = new Company();
}
class Main {
public static void main(String[] args) {
int type = Fruit.APPLE;
// @근데 오류!: switch문에 type자리에 만든 데이터타입Fruit은 안된다
// if로 하는 것보다 switch문이 잘 보이는데... --> enum으로 해결할 수 있다!
switch(type){
case Fruit.APPLE:
System.out.println(57+" kcal");
break;
case Fruit.PEACH:
System.out.println(34+" kcal");
break;
case Fruit.BANANA:
System.out.println(93+" kcal");
break;
}
}
}
/*
class Fruit{
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
*/
// 위에 길던 게 enum으로 한 줄 됨!
// 값이 서로 다른 인스턴스(APPLE...)가 만들어지게 됨(new Fruit();에 의해)
enum Fruit{
APPLE, PEACH, BANANA;
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
class Main {
public static void main(String[] args) {
Fruit type = Fruit.APPLE;
switch(type){
case APPLE: // enum-switch 약속: Fruit.APPLE아니라 Fruit.없이 APPLE만 쓰면 된다.
System.out.println(57+" kcal");
break;
case PEACH:
System.out.println(34+" kcal");
break;
case BANANA:
System.out.println(93+" kcal");
break;
}
}
}
/*
class Fruit{
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
*/
enum Fruit{
APPLE, PEACH, BANANA;
// 1. 하나하나 APPLE... 만들 때마다 new Fruit() 인스턴스화 되는 과정이 실행
// 2. 인스턴스가 생성될 때마다 생성자Fruit()가 호출되는데
Fruit(){ // 3. 걔가 바로 얘 "Call Constructor"
System.out.println("Call Constructor" + this) // this는 APPLE...
}
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
public class Main {
public static void main(String[] args) {
/*
if(Fruit.APPLE == Company.APPLE){
System.out.println("과일 애플과 회사 애플이 같다.");
}
*/
Fruit type = Fruit.APPLE;
switch(type){
case APPLE:
System.out.println(57+" kcal");
break;
case PEACH:
System.out.println(34+" kcal");
break;
case BANANA:
System.out.println(93+" kcal");
break;
}
}
}
/*
/*
class Fruit{ // @1. 클래스로 상수를 정의하게 되면 APPLE..을 배열처럼 열거할 수는 없음
// APPLE... 이 각각 어떤 상수를 가지고 있는지를 알아야 코드를 작성할 수 있는데
public static final Fruit APPLE = new Fruit();
public static final Fruit PEACH = new Fruit();
public static final Fruit BANANA = new Fruit();
}
*/
enum Fruit{// @2. 열거형이 위 클래스 방식과 다른점은
// 이건 각 APPLE.. 안에 어떤 데이터가 있는지는 몰라도
// 배열처럼 안의 데이터를 하나씩 꺼내서 처리할 수 있다는 것
APPLE("red"), PEACH("pink"), BANANA("yellow"); // 1. APPLE("red"): APPLE 생성자 호출-red라는 인자 전달한 것
private String color;
public String color; // 4. 여기에 들어감 -> Fruit 의 인스턴스의 인스턴스 변수인 color값이 "red"되는 것
public String getColor(){
return this.color ;
}
Fruit(String color){ // 2. String color에 "red"
System.out.println("Call Constructor" + this)
this.color = color ; // 3. "red"는
}
}
enum Company{
GOOGLE, APPLE, ORACLE;
}
public class Main {
public static void main(String[] args) {
for ( Fruit f : Fruit.values()){ // @3. 그 때 사용하는 메소드가 values = 상수들의 배열을 가져오는 것
// forin 구문
// = (어떤 데이터의 집합에 속해있는 것을 하나하나 꺼내서 f라는 변수에 담아주는 것 : 어떤 데이터의 집합)
// values가 호출되면서 Fruit가 갖고 있는 데이터들 APPLE...을
// 하나씩 Fruit f 에 담는 것, 그리고 아래에서 출력
System.out.println(f);
}
Fruit type = Fruit.APPLE;
switch(type){
case APPLE:
System.out.println(57+" kcal, color " + Fruit.APPLE.color);
// 5. enum이 단순히 상수로서의 기능만 하는 것이 아니라
// 그 상수가 어떤 값을 갖게 하는 등의 일을 더 적은 코드로할 수 있음
break;
case PEACH:
System.out.println(34+" kcal color " + Fruit.PEACH.getColor);
// 6. 물론 enum 멤버로 메소드를 사용할 수도 있음
break;
case BANANA:
System.out.println(93+" kcal color " + Fruit.BANANA.color);
break;
}
}
}
package lesson8;
class Gender{
// 여, 남
public static final String MALE = "male" ; // 상수는 대문자로 표시, 바꾸지 않는 상수여야하니까 final
public static final String FEMALE = "female" ; // 어차피 모두가 다같이 보고 써야하니까 static
}
// 요즘 방식: 위와 똑같은 기능
enum GenderE{ M, F }
public class Enum1 {
public static void main(String[] args) {
System.out.println(Gender.MALE);
System.out.println(Gender.FEMALE);
System.out.println(GenderE.F);
GenderE a = GenderE.F;
switch (a) {
case F:
break;
case M :
break;
}
System.out.println(GenderE.F);
}
}
단축키