노베이스 지방 국비충


오늘은 추상 클래스를 복습하고

이전 강사님에게선 안 배운 쓰레드를 배웠음


추상 클래스 예제로 동물 - 포유류 - 강아지, 고양이 ... 이런식으로 틀을 잡고

이를 활용하는 프로그램을 짜는게 오늘 과제였음




도중에 내가 메인단에서 mom.getSon().getClass() 하면 Animals.Dogs 로 찍히는데

바로 아래다가 Dogs son = mom.getSon() 하면 getSon 이 오브젝트래요 오또케

하니까 강사님이 웬일로 설계도 안 짜고 코딩부터 하는

내 코드 가져가서 보시더니 답에 근접한 힌트 주셔서 깨우침


포유류 - 강아지, 고양이 이 관계에서

포유류 추상 클래스를 제네릭으로 선언하고

자식 클래스에서 포유류 클래스를 상속, 리턴해줄때

강제 캐스팅 없이 바로바로 꺼내지게 하려면

public class Dogs extends Mamalia<Dogs> 이런 식으로 상속해야 하더라


기초가 단단히 잡혀있으면 개발자적으로 사고해서 금방 해결할 문제인데

기초가 안 잡혀있으면 이런거 검색해도 못 해결한다고 하시는데

실제로 검색해도 강제 캐스팅해라, 겟 메소드에 뺑끼 부려라

이딴게 스택 오버 플로우에서 추천 존나 받은 답변으로 달려 있어서

내가 원하는대로 해결 못하는거였는데 엄청 멋있어보였음

제네릭을 안 배우고 자습해서 하는거라 도움 못 받았으면 해결 못했을듯



어제 드래그 레이싱 대충 생성, 레이싱까진 구현했으니까

강사님이 예시로 든 달리기 경주 이런건 똑같은거라

뭐하지 뭐하지 하다가 번뜩 좋은 아이디어가 떠오름


2차원 배열을 사냥터로 지정하고 사냥터에 먹이 배치는 랜덤으로 지정함

그리고 엄마-아들 객체로 묶어 댕댕이와 떼껄룩을 생성하고

엄마들이 열심히 사냥터를 랜덤하게 뛰어다니면서 먹이를 찾고 아들 객체한테 먹여서

최종적으로 누가 누가 자식한테 밥을 더 많이 멕였나를 겨루는

사냥 대회 프로그램을 짜기로 했음


처음에는 쓰레드를 안 배우고 걍 싱글 쓰레드 while 문 하나로 돌아가게 짰는데

강사님 쓰레드 강의 대충 들으면서 이것이 자바다 책 자습해서

두 개의 쓰레드가 하나의 공유 객체 클래스를 가지고 번갈아가면서 작동하게 바꿈




abstract class Animals implement AnimalMoves

ㅣㅣ

abstract class Mamalia<T> implement MamaliaMoves

ㅣㅣ

class Dogs extends Mamalia<T> 이런 구조임



Main thread


[DogThread, CatThread]

ㅣㅣ

공유 객체 Synchro


쓰레드 구조는 저럼





짤은 메인이랑 synchro 고

아래 움짤은 실제로 돌아가는거


짤은 편집해서 빠르고, 스킵된 부분이 있는데

원래 저렇게 빠르진 않고 sleep 텀 줘서 차근차근 실행됨

짤에 있는진 모르겠는데 엄마 댕댕이랑 껄룩이 같은 자리에 모여도 모여있게 표현해줌



꿀잼 ㅋㅋ