https://github.com/freenice12/ChatRoomForJAVABeginner
--
약 한 달간 작업했다.
아직도 리팩토링할 부분이 많지만 차차 리뷰해보도록 할 예정이다.
일단
... !! 특징 !!
을 쓰기전에 엄청나게 정교하게 설계를 하고 코드를 구현해야 리팩토링이 한결 쉬워진다는 것을 깨달았다.
클린 코드라는 책을 읽었는데, 30% 정도밖에 이해를 못했음에도 불구하고 많은 도움을 받았다.
1. byte Array 를 이용한 소켓 통신을 구현
- 부가적으로 버퍼의 사용 이유와 byte array 를 이용해 저 수준의 통신을 구현할 수 있었음
- 저 수준의 통신 구현 후에 Object...Stream을 통해서 Object를 주고 받는 통신을 구현
- System.arraycopy 와 배열, String을 다루는 법을 많이 알게 되었음
- 저 수준 통신 -> Object...Stream 으로 리팩토링 하면서 코드의 줄 수가 굉장히 줄어드는 마법을 경험
- 일정부분 리팩토링 된 소스를 대체하는 과정은 생각보다 쉬웠고 위의 마법은 단지 30분 만에 일어났... ㄷㄷㄷ
= 반면에 더 공부해야 할 부분은 java nio!
2. 프로토콜을 규정해 프로토콜로 통신을 했다고 생각함.(솔직히 이 부분은 아직도 가려움..ㅠㅠ)
- Object...Stream을 사용하면서 프로토콜(?)을 읽고 해석하는 기능은 소멸됨ㅋ
3. Swing 을 이용한 GUI를 구현, 각종 기능들에 대해서
4. 적어도 '내 생각'에는 "유니 캐스트, 멀티 캐스트,
- 브로드 캐스트는 다른 개념이더구만요?!
5. 클래스 다이어그램을 작성했는데 이건 공부하면서 그린거라 잘 그린건지 모르겠음
- 꽉찬 다이아, 텅빈 다이아, 상속, 구현 등 많은 것을 봤는데 용어가 기억 안나는 건 왜지?ㅠㅠ
등등 더 있겠지만,
이런 프로그램을 만들다 보니 욕심이 생겨서 기능도 추가하고, 곧 메신저도 만들어 보고싶고,
실행파일을 만들어서 서버를 설치해 실제로 돌아 가는지 시험해 보고 싶기도 하고,
누군가 쓸 수 있는 형태로 바꿔 설치해 주고 싶기도 하다.
어쨋든 일단 오늘은 폴더 2개의 압축 파일을 남겨본다.
주석은 없다. 쉽게 읽히도록 코드를 작성하려 노력했고 같은 느낌으로 리팩토링도 진행했다.
먼저 byte 어쩌고 하는 폴더가 프로토콜을 이용한 채팅 프로그램
object 어쩌고 하는 폴더가 프로토콜 날리고 오브젝트를 주고 받는 소스이다(간결).
라고 쓰고 게시물을 업데이트 했는데 파일을 추가할 수 없다.
차근차근 코드를 뜯고 씹으면서 게시물로 승화 시켜야겠다.
덧. 프로그램을 만들다가
ObjectInputStream과 ObjectOutputStream 을 사용할 때 황당? 한 블로킹이 됐다.
ObjectInputStream 을 먼저 사용하고
ObjectOutputStream 을 나중에 써주면 (서버와 클라이언트 모두 같은 순서)
서로 읽으려고 깝치면서 일종의 데드락? 이 걸리는 것 같았다.. 이런식으로 경험할 줄이야?
둘중의 하나를 ObjectOutputStream 이 먼저 오게 바꿔주면 해결이 된다.
그리고 그 이유는
http://ubuntuforums.org/showthread.php?t=1682680
여기서 찾았는데.
맞나 모르겄다~!
읽어보니 그런것 같기두?
댓글 없음:
댓글 쓰기