본문 바로가기

공부/TIL

23.10.23

키오스크 과제를 제출했다.

선택사항을 모두 구현하고 싶었지만, 선택사항은 구현에 실패했고, 필수사항과 선택사항 1번만 구현에 성공했다.

선택사항에 실패한 이유를 분석해봤다.

실패한 첫번째 선택사항은 메뉴의 옵션을 추가하기 였다.

너무 어렵게 생각했다. 단순히 Product 메뉴에서 옵션 필드를 String 타입으로 하나 선언해주고, double 타입으로 옵션 가격을 따로 선언하면 되는 간단한 문제였다.

나는 옵션이 추가 되는 순간 Product메뉴들을 담고있는 배열을 모두 수정해야하나? 라는 생각에 겁을 먹고 구현에 실패했다. 좀만 더 생각해보면 간단한 거였는데 후회가 남았다. 이건 여유시간이 될때마다 좀 더 구현을 해서 마무리해보고 싶다.

실패한 두번째 선택사항은 오늘 총 판매 목록 조회였다. 

나는 Product 객체를 ArrayList에 저장해서 사용중이었다. 하지만 장바구니를 예쁘게 만들기위해 장바구니 에 들어갈 때는 contains()메서드를 이용하여 중복된 값이 있을때는 상품 count를 올려주는 방식을 채택 했다. 근데 총 판매 목록 조회에선 장바구니 뭉텅이가 한번에 들어와 내가 사용하는add()메서드를 사용하는게 까다로워 구현에 실패했다. 

쓰다보니 해결방법이 생각난다. 이는 for문을 장바구니의 크기에 맞게 돌려 주면서 add를 하면 어땠을까? 물론 main함수가 조금 더러워지겠지만, 구현이 가능할 것 같다.

 

오늘 과제를 제출을 하고 팀원들과 개인과제 코드를 서로 공유했다. 다른 팀원들은 내가 생각했던 깔끔한 방식처럼 main함수에 몇줄 안들어가고, 대부분의 메서드들과 필드값들을 각 설계에 맞는 클래스에 넣어서 관리했다. 내가 하고 싶었던 방식을 구현한 팀원들을 보면서 대단하다고 느꼈다. 그리고 힌트도 많이 얻었다. 저렇게 하면 코드가훨씬 깔끔하게 돌아가는구나. main함수에서는그냥 run()함수 한개만 호출해서 돌릴 수 있게 컨트롤 클래스/뷰 클래스/모델 클래스에서 모든걸 다 구현해놓으면 되는구나!

그래도 내가 과제에 성공하고, 제출했다고 했더니 팀원들이 되게 칭찬해줬다. 팀원들이 응원을 잘해주는 사람들이여서 다행이다. 겁먹지 않으려고 해도 겁이 계속 든다. 그래도 정말 2주전보다 훨씬 많이 성장함을 느꼈다. 내일부터는 팀과제다. 이제 정말 1인분 이상을 해야한다.화이팅!

 

 

아 오늘은 미뤄두었던 자바 5주차 강의를 완강했다. 쓰레드와 프로세스에 대해배웠다. 

쓰레드는 동시에 프로그램을 돌리기위해사용한다. 예) 노래를 들으면서 카카오톡을 하면서 코딩하기!

프로세스는 프로그램 하나가 실행되는 단위! 스레드는 프로세스 <안>의 실질적으로 작업을 처리하는 단위.

스레드의 상태는 

스레드초기화 -> Runnable상태-> Running상태 -> 실행중지상태 이렇게 크게 나눌수 있고,

start()메서드가 호출이 되면 스레드는 Runnable 상태로 돌입된다. 이때 스레드 스케줄러에 의해선택되면 Running 상태로 들어간다. Running 상태에서 스레드 작업이 종료되면 Daed 상태로 들어간다. 또한 Running 상태에서 sleep(), yeild(), wait(), 블로킹이 되면 실행 중지 상태가 되어 잠시 대기를 한다.

이런식으로 프로그램이 작동하면서 여러 스레드가 유기적으로 움직이게 된다. 한 스레드가 움직일 때 다른 스레드는 잠시 멈추거나, 아니면 계속 돌거나! 이때 프로그램이 직접 정해주지 않는다면, 스레드의 작업 순서는 완전한 랜덤이다.

이때 내가 스레드의 우선순위를 두고 싶다면, MIN_PRIORITY(최소, 값은 1) 혹은 MAX_PRIORITY(최대, 값은 10) 상수, 혹은내가 주고 싶은 수를 이용하여 스레드의 우선순위를 할당해주면 된다. 아무 우선순위도 정해지지 않았을 때는 5의 값으로 생성됨.

이떄 생기는 문제점은 동일한 자원에 여러 스레드에서 동시에 메서드가 접근하여 작업을 하는 경우! 콘서트 예매를 하는 시스템에 같은 좌석에 여러 스레드가 동시에 접근한다면 문제가 생길것!(내가 당하면 난 정말 죽을지도 몰라) 이때를 위해 한 스레드가 메서드에 접근해서 예매작업을 실행할 때 다른 스레드에서 해당 메서드에 접근할 수 없게 처리하는 작업. 이런 작업을 동기화 작업(싱크로나이즈드)라고 한다.동기화를 하기 위해선 메서드 앞에 지정하여 구현하거나, 동기화 코드 블록을 넣어 구현한다. 

 

또 오늘은 깃에대해 조금 공부했다. 깃은 협업을 하기 위해 필수적으로 사용한다고 한다. 깃에 코드를 올리면 여러 사람들과 코드를 동시에작업할수 있게된다. 깃을 통해 깃허브에 팀이 사용할 코드를 올리면 팀원들은 깃허브에서 코드를 받아서 동시에 작업한다. 이때 어떤 코드가 수정됐는지 알 수 잇게 되어 소통에 좋다고 한다. 내일부터 팀프로젝트를 깃으로 협업할 것 같으니 깃에 좀 더 익숙해져야겠다. 다행히 인텔리제이에서 깃을 정말 편하게 사용할수 있게 지원을 해주어 우선은 인텔리제이로 사용할 예정!

깃 베쉬로 깃을 다루는 것은 아직 너무 어렵다.. 

'공부 > TIL' 카테고리의 다른 글

23.10.25  (0) 2023.10.25
23.10.24  (1) 2023.10.24
23.10.20  (0) 2023.10.20
23.10.19  (0) 2023.10.19
23.10.18  (0) 2023.10.18