TIL/자바(7)
-
[자바] 사다리 게임 구현
로또 게임 이후 스터디에서는 사다리 게임을 구현하였다. 이제 코드컨벤션을 지키며 코딩하는 것과 로직마다 테스트 코드를 작성하는 것, 객체지향적 설계를 하는 것에 익숙해진 느낌이었다. 물론, 아무것도 몰랐던 스터디 이전의 나와 비교했을때 말이다. 이번 사다리 게임을 구현하면서 느꼈던, 배웠던 것들에 대해 정리해 보려고 한다. (사다리 게임) 1. 객체를 이용한 2차원 배열 사다리를 구현하기 위한 구상을 하던중, 가장 이슈가 될만한 것은 역시 사다리를 어떠한 데이터 형으로 저장할 것인가 였다. 생각한 것은 역시 2차원 배열이었다. List 의 형태로 만들어서, 한줄 한줄의 정보를 더하여 사다리를 만드는 것이다. 하지만 이와 같은 코드를 이용할 경우 한줄을 의미하는 코드가 어떤 것인지, 전체 사다리의 모습을 ..
2020.05.24 -
[자바] 로또 게임 구현
스터디에서 진행하는 자바 콘솔 애플리케이션 개발의 세번째 작품인 로또 게임 구현은 지난 레이싱 게임 때보다 훨씬 많은 조건을 충족시키며 개발하였다. 덕분에 많은 고민을 하며 스트레스를 받았지만 그만큼 알게된 것과 얻은 것이 많았다. 전체 프로젝트를 진행하면서 새로 알게된 내용들을 정리하게 되었다. (로또게임) 1. Collection에서 제공하는 unmodifiable 메소드. 개발을 하다보면 어느 시점에서 더이상 데이터가 변경되지 않아야 하는 상황이 온다. 로또 프로그램을 만들면서 로또의 번호가 한번 정해지면 더이상 변경되지 않아야 한다던가, 게임 결과가 변경되지 않아야 한다는 것처럼 말이다. 위의 두 메소드는 한 로또에 속해있는 번호를 반환해주는 메소드와 당첨 결과를 담은 map을 반환해주는 메소드이..
2020.05.18 -
[자바] Java와 JVM
'자바를 왜 사용해?' 라는 질문에 나는 어느 정도까지 대답을 할 수 있을까. 배웠던 내용을 찬찬히 생각해본다면 여러 이유를 찾아낼 수 있겠지만, 즉각적으로 대답할 수 있는 내용은 매우 적었다. 자바가 객체지향 프로그래밍을 지원하는 언어이니까? 웹 어플리케이션 개발에 가장 많이 사용되는 언어이니까? .. 정도....? 내가 사용하는 언어이면서 이정도밖에 대답이 나오지 않는다는 것은 참 부끄러운 일이다. 한번쯤 찾아보았던 내용이지만, 정리를 해두지 않아서 계속 잊어버리는 자바의 기원에 대해서 간략하게 정리해보려고 한다. 또한, 자바가 강력할 수 있는 근본적 이유인 JVM에 대해서도 간단히 정리하겠다. 1. Java의 기원 자바는 썬 마이크로시스템즈의 제임스 고슬링이 개발한 프로그래밍 언어이다. (물론, 혼..
2020.05.06 -
[자바] getter메소드 사용을 지양하자
기존의 나는 코딩을할때 상태값이 있는 클래스에는 무조건 getter와 setter를 기본적으로 정의해주곤 했다. 최근 OOP스터디를 하던중, getter메소드 사용을 지양해야한다는 피드백을 들었는데, 그 이유에 대해서 정리해보고자 한다. 먼저, 내가 공부해온 내용을 토대로 추측한 이유를 적어보겠다. 나는 '객체지향의 사실과 오해'라는 책을 읽고나서, 객체의 상태가 변경되는 것은 객체 스스로의 행동에 의해서야 한다는 것을 알게 되었다. 이렇게 설계될때, 객체는 자율적인 객체가 되고 외부의 영향을 받지 않음으로써 느슨한 결합과 유연한 협력을 이룰 수 있게 된다. 이러한 관점에서 볼때, getter와 setter는 자신의 상태정보를 외부에 노출하는 격이 되고, 이것은 외부의 영향으로 상태정보가 변할 수 있는 ..
2020.04.25 -
[테스트] JUnit 과 AssertJ
항상 System.out을 이용하여 로직이 잘 돌아가는지 확인을 했었던 나는, 최근 테스트 코드가 무엇이고 이것이 얼마나 중요한지에 대해 알게 되었다. 먼저, 기존의 Main메소드를 통한 테스트가 어떠한 문제점이 있는지 알아보았다. production code와 test code가 클래스 하나에 존재하게 된다. 이것은 클래스의 크기를 커지게 만들고, 복잡도 또한 높이게 된다. Test Code가 실 서비스에 같이 배포된다. Main 메소드 하나에서 여러개의 기능을 테스트하게 된다. 이로써 결과물을 분석하는데에도 복잡도가 증가한다. 메소드 이름을 통해 어떤 부분을 테스트하는지에 대한 의도를 드러내기 힘들다. 테스트 결과를 사람이 수동으로 확인해야한다. 마지막 이유 하나만으로도 충분히, 테스트 코드의 중요성..
2020.04.23 -
[자바] 레이싱 게임 구현
객체지향 프로그래밍 스터디를 진행하던 중, 콘솔로 진행하는 간단한 게임을 구현해보았었다. (레이싱게임) 객체지향과 관련된 책을 읽고있지만, 역시 직접 개발을 하는것은 또 다른 문제였다. 열심히 작성하고 피드백을 받았는데, 그 내용이 너무 중요하고 기본적인 것이라 정리를 하게 되었다. 1. 배열보다 Java Collection을 사용하라. 처음 이 피드백을 보았을 때는, List가 배열보다 사이즈 조절에서 아주 강점이 있기 때문이라고 생각했다. 즉, 삽입과 삭제가 배열에 비해 매우 쉽기 때문이라고 생각했다. 뭐 틀린 것은 아니겠지만 구글링을 해본 결과 생각해본 적도 없는 내용을 발견하였다. '이펙티브 자바 규칙 25 - 배열대신 리스트를 사용하라' 가 바로 그 내용이다. 배움이 얕은 나로서는 내용이 좀 어..
2020.04.22