[코드스쿼드 코코아 과정_자바] AWT 이용해서 상태바에 현재 시각 출력하기

Kyu·2020년 11월 25일
0

문제

출처 자바의 정석 2판 저자 남궁성

Commit history

깃헙링크: https://github.com/kyu-kim-kr/codesquad-cocoa-java/commits/main/clockonstatusbar

1. Create basic setting

생성자를 만들어서 super를 써봤다. 자바의 정석 예제를 보면서 하느라 별 생각없이 이렇게 시작해야할거 같아서 이렇게 시작했다

2. Make function clock

현재시간을 String으로 리턴하고 메인메소드에서 바로 불러오려고 시도했으나 인스턴스를 새로 만들면서 파라미터를 또 new 연산자를 써서 Clock 클래스를 불러왔으나 실패했다. 이벤트 리스너 사용할때 괄호안에 새로 만들어서 많이 쓰길래 이렇게 하면 될줄 알았다. 즉, 리스너 작동방식을 아직 완전 이해하지 못함.

3. Make class clock seperately

작동안해서 클래스를 아예 따로 두고 다시 시도해보고 싶었다. 이것도 작동안했다

4. Restructure

프레임 만들면서 String 타입으로 타이틀을 바로 설정해줄 수 있기 때문에, 그냥 메인메소드에 시계를 구현하고 마지막에 프레임을 생성해서 시계를 넣어주고 싶었다.

5. Create objects for clock

import Date와 SimpleDateFormat

6. Modify package about time

뭐가 패키지고 클래스인지 아직 헷갈리긴 하지만 package라고 썼다. LocalTime을 사용하면 더 편할것 같아서 바꿨다.

7. Structure

Frame을 만들면서 바로 타이틀 입력하는 법 말고 따로 설정해주는 방법이 있지 싶어서 IDE에서 대충 .넣어서 추천해주는 코드에서 원하는 기능 setTitle을 찾았다. Frame 객체를 만들고 시계 코드를 작성하고 setTitle하면 더 보기 좋아보일거 같았다. 음, 그리고 이렇게 해야할 거 같았다.

8. Made it but didn't work

LocalTime을 쓰고 싶었으나 LocalTime.now()로 만든 시각이 String타입이 아니라서 쓰질 못했다. 다시 Date와 SimpleDateFormat으로 바꿨다. String으로 받은 현재시간을 while문을 계속 돌렸다. 예외는 없었지만 작동시킨 시점에서의 시각만 나오고 시각이 바뀌지 않았다.

9. Try another way

마우스 이벤트와 관련된 코드를 보다가 어제 호눅스가 설명해주신 비동기에 대해서 생각났다. 자세히는 모르지만 병렬로 실행된다는 문장이 생각이나서 내가 만들어야하는 것도 그렇게 실행되어야하지 않을까 생각했다. 왜냐면 while(true){}로 무한 반복하고 있기 때문에 Frame 안에 다른 컴포넌트가 작동하려면 그렇게 되어야하지 않을까 생각했다. 여기서 쓰레드라는 키워드도 떠올랐다. 어쨋든, Frame과 관련된 이벤트 리스너를 찾았고 어떤 식으로 쓰이는지 검색을 통해 알아낸 뒤에 내가 하려는 것에 적용해보았다. 예외는 없는데 프레임 타이틀이 비어있었다. 아직 리스너에에 대한 이해가 부족해서인지 왜 작동안하는지 모르겠다.

10. Finally It works

리스너와도 상관이 없는거 같은 느낌이 들어서 아예 처음으로 돌아가서 생각해보기로 했다. 뭐가 문제였을까? 생각하다가, 이전에 한글시계 만든 것이 생각이 나서 살펴보고 그제서야 뭐가 틀렸는지 답이 나왔다. 근데 작동하도록 코드를 고쳤지만 Date와 SimpleDateFormat의 객체를 계속해서 무한으로 생성하기 때문에 문제라고 생각한다.

profile
TIL 남기는 공간입니다

0개의 댓글