본문 바로가기
JAVA/★객체지향

상수2 - enum이 쓰기전의 상황/ switch문 예시

by SEOKIHOUSE 2023. 3. 14.

일단 예제보자


apple이 중복돼서 이름을 늘려주었다


 근데 너무 지저분하니까 인터페이스를 써보자


완전히 깰꼼해졌다 근데 만약에 fruit apple이랑 company apple이랑 비교하면 어케될까?


같다고 떠서 이러면 안되니까 음.. 오류를 미리 잡을 수 있도록 바꿔보자

Fruit와 Company 클래스를 만들고 클래스 변수로 해당 클래스의 인스턴스를 사용하고 있는데 각각의 변수가 final이기 때문에 불변이고, Static이므로 인스턴스로 만들지 않아도 된다. but 에러발생 why? 데이터타입이 달라서 비교안됨!

그런데 위의 코드는 두 가지 문제점이 있는데 하나는 switch 문에서 사용할 수 없고 또 하나는 선언이 너무 복잡하다는 것이다. 


static 은 인스턴스로 왜 안만들어도 되는가? 설명

static이란 사전적 의미로 static은 정적인, 고정인 이라는 뜻.

 

static은 변수를 선언하거나 메소드를 생성할 때 같이 붙여 써주는데

 

이렇게 static으로 선언한 변수는 "프로그램이 실행될 때 Java메모리에 할당되며, 이는 프로그램이 종료될 때 해제된다"고 한다.

 

위 굵은 글씨를 해석하면, static은 "해당 클래스의 객체를 생성하지 않고도 static자원에 접근이 가능하다"라는 뜻이다.

 

머선소리고 잉? 예시를 만들어보자꾸나 

이 예시는 객체생성하지 않고 값을 가져오려고 햇는데 안된다고 오류가 뜬다

 

클래스 내부의 자원에 접근하려면 아래처럼 해당 클래스의 인스턴스(객체)를 생성해야 하는데 static을 사용하게 되면 위와 같이 인스턴스(객체)를 생성하기 전에 메모리에 static변수가 할당되어 인스턴스 생성없이 바로 사용/접근 할 수 있는 것이며, 이는 메모리를 통해 해당 변수를 모두가 공유하기 때문이다. 따라서 static으로 공유된 변수를 사용할때 그만큼 메모리를 따로 할당하지 않고 절약할 수 있는 것이다.

 

"Cannot make a static reference to the non-static field num2"

 

------> static영역에서는 non-static 필드인 num2를 사용할 수 없다고 나오며, num2를 static으로 바꾸라는 뜻이다.

 

이는 num2라는 일반적인 변수가 인스턴스화 되기 전에 사용해서 static영역에서는 일반변수를 사용할 수가 없는 것이다. 즉 객체생성 후 사용해야한다


switch문

여기서 데이터타입은 fruit로 들어감

근데 이렇게 되면 if문은 사용할수 있지만 가독성 좋은 switch문은 사용이 안된다 왜? switch문은 사용할 수 있는 데이터타입이 제한되어있음

----> byte, short, char, int, enum, string, character, Byte, Short, Integer 

 

 

다음챕터에서 enum으로 이것을 해결해보자 이오노노오오옴!