개인프로젝트 제출 마지막 날!
우선, 깃허브 링크를 남겨놓아야겠다 (https://github.com/wkdehf217/Java_Kiosk)
키오스크 기능 구현은 다했지만
계속 고민해봤던 클래스 / 인터페이스 활용은 못했다.
static으로 공유한다음에 간단하게 만들면 되는건데..
또, initialize 부분은 private으로, 생성자는 public으로 만들면 좋았을 것 같다.
물론 메인에서 다 구현하면 안좋은것은 맞지만, 자연스럽게 코드 구조 자체를 그런방식으로 만들어 나가는게 아직 적응이 안됐다.
근데 해설영상을 보니 super(name, explanation); 이거 썼네? 쓰는게 좋구나 다행이다!
메소드 안에서 메소드를 호출하게끔 하거나 해서 이 메소드가 뭐하는지 명시하는게 좋다.
메인메뉴로 다시 돌아가는거 return을 써도 됬지만, 재귀호출을 알고있었다면 써볼만 하다.
...
자바의정석 책도 샀으니 클래스 관련 부분 다시 한번 공부 하려고 한다.
그 부분 말고 기능쪽은 버그도 다 잡았고, 예외처리도 해놔서 어느정도는 만족한다.
이제 해설 영상 보다가 하루를 마무리 하고, 내일부터 팀 과제도 시작이니 잘 해보려고 한다.
추가로 static 관련 공부하다가 인터넷에서 좋은 예시가 있길래 메모 해 보았다.
스태틱의 특징은 '공유' 개념과 메모리의 이점
메모리의 이점
예를들어서 클래스 안에 aa라는 변수가 있다고 하자.
그러면 그 클래스를 2번 만들면, 각자 aa가 하나씩 총 2개의 메모리가 잡히겠지?
근데 static을 쓰면 같은 곳의 메모리 주소를 가리키기 때문에, 메모리 할당을 한 번만 하기 때문에 메모리상 이득이다
공유
예를 들어서 한 클래스 안의 생성자 안에서 count라는 변수가 있고, count++ 하는 코드가 있다.
그러면 객체가 2번 생성되면 count는 객체1에서 1, 객체2에서도 1이겠지?
하지만 static을 쓰게 되면 '공유'가 되기 때문에
객체가 2번 생성되고 난 후 count는 2가 된다.
class Counter {
int count2 = 0;
static int count = 0;
Counter() {
count++;
System.out.println(count);
}
public static int getCount() {
// return count2; 불가능한호출
// 왜? static 변수는 먼저 메모리에 잡히기 때문에, 자기보다 나중에 생성되는 변수나 메소드는 모른다
// 그래서 변수인 static count는 알지만, 멤버변수인 count2는 static 메소드인 getCount가 모를수밖에
return count;
}
public static int getCount2(int cnt) {
return cnt+1;
}
}
public class Main {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
System.out.println(Counter.getCount()); // static 메소드는 객체 생성없이 클래스 이용하여 호출
System.out.println(Counter.getCount2(1));
System.out.println(Counter.getCount2(2));
}
}