본문 바로가기

자바(Java)

(5)
[TIL] 객체 지향 설계 - 사다리 타기 게임 (Java) 1주 동안 코드스쿼드 과정의 사다리 타기 게임을 구현했습니다. 구현하면서 느꼈던 배운 점을 간단히 정리해보겠습니다. Commit과 PR하기 - 작은 커밋 단위, 의미있는 커밋/PR 메시지 Commit은 마치 게임에서 세이브 포인트처럼 git에서 프로젝트의 상태를 저장하고 있는 객체라고 볼 수 있습니다. 언제든지 특정 시점으로 돌아갈 수 있는데요, 작은 규모의 개발 환경에서는 커밋 로그를 잘 남기는 것이 그렇게 중요하지 않을 수 있습니다. 언제 어떤 작업을 했는지 비교적 잘 기억할 수 있으니 말입니다. 그렇지만 프로젝트의 규모가 커지고 여러 사람이 협업을 하게되면, 어느 시점에 누가 어떤 변경사항을 만들었는지 알기 어렵게되고, 따라서 어느 시점으로 돌아가야할지 로그가 잘 남아있지 않다면 찾기 어려울 것입니..
Java Coding Convention 검사하기 - Formatter, CheckStyle 저번 포스팅에서는 구글 자바 코딩 컨벤션의 내용을 알아보았는데요, 이번 포스팅에서는 자바 코딩 컨벤션에 맞추어서 작성한 코드를 Formatter를 통해서 자동 정렬하고, CheckStyle을 통해서 검사하는 방법을 알아보겠습니다. Formatter 사용하기 https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml GitHub - google/styleguide: Style guides for Google-originated open-source projects Style guides for Google-originated open-source projects - GitHub - google/styleguide: St..
Java Coding Convention 핵심만 알아보기 Coding Convention이란? 코딩 컨벤션은 프로그래머 사이의 코드를 작성하는 양식입니다. 개발자마다 미묘하게 코드를 작성하는 방식이 다르죠. 좁게는 괄호의 위치, indent 간 스페이스의 개수부터 시작해서, 넓게는 변수, 클래스, 객체의 이름을 짓고 javadoc을 작성하는 것까지 Convention에 해당합니다. 우아한 테크코스에서는 Google 자바 코딩 컨벤션을 참고하였으나 거기에 추가 요구사항(indentation, 열너비의 변경사항)을 반영한 컨벤션으로 코드를 작성해야 했습니다. 사실 IDE에는 내장된 formatter를 사용해서 대략적인 컨벤션에 맞춰 자동으로 코드를 수정해주는 기능이 있습니다. IntelliJ에서는 Ctrl + Alt + L를 통해서 코드 양식을 맞출 수 있습니다...
ArrayList의 동적 배열 할당 원리 (Java) ArrayList는 어떻게 동적으로 늘어날까요? LinkedList는 ArrayList 대비 add/delete가 빠르다는 장점이 있다고 알려져있습니다. ArrayList의 마지막 요소에 add 메서드를 실행하면 시간 복잡도가 O(1)이라고 알려져있는데, 정적 할당된 배열의 사이즈를 바꾸는 것은 새로운 정적 배열을 선언 후 복사해야하기 때문에 O(n)이 됩니다. 사실 요소를 하나하나 삽입할 때마다 배열을 재할당하면 연산량이 엄청나겠죠. 분명 내부적으로 리사이즈하는 주기를 별도로 두었을거라는 생각이 들었습니다. 자세히 살펴보기에 앞서, 먼저 Array와 ArrayList의 차이점을 알아봅시다. Array와 ArrayList의 차이 Array는 크기가 고정되어있는 정적배열, arrayList는 동적 배열이다..
배열의 메모리는 연속일까? 메모리 주소 조회 (Java) 메모리의 계층 구조와 배열 자바에서 메모리는 어떻게 관리될까요? code - data - heap - stack의 계층으로 메모리는 저장됩니다. 우리가 배열의 인스턴스를 생성한다고 생각해봅시다. 여기서 우변의 new int[10]은 length가 10인 int 배열의 인스턴스를 생성한다는 의미입니다. 자바에서 new를 사용한 인스턴스 생성은 동적할당을 의미하므로 heap 영역에 생성됩니다. 좌변의 numbers는 4 byte의 용량을 가진 참조변수입니다. 어느 객체를 참조하던지 상관없이 참조변수는 항상 같은 크기로 할당됩니다. 따라서 참조변수를 저장하는데 필요한 메모리 공간은 compile 시에 결정할 수 있습니다. 컴파일 타임에 결정되는 지역 변수, 매개 변수는 stack에 저장되죠. int[] num..