Objcet는 자바의 모든 클래스의 조상 클래스로, 객체를 만들 수 있는 구체 클래스지만 기본적으로 상속해서 사용하도록 설계되어있다. Object의 재정의를 염두에 두고 설계된 메서드 equals, hashCode, toString, clone, finalize를 잘못 구현하면 오작동할 수도 있기에 어떻게 재정의해야하고 왜 재정의해야하는지에 대해서 학습한다. 10. equasl는 일반 규약을 지켜 재정의하라. equals는 재정의하기 쉬워보이지만 자칫하면 원치않은 결과를 초래할 수 있다. 이러한 원치않은 결과를 바라지않는다면 웬만큼 재정의하지말자. 만약 해야하는 경우가 있다면 아래 규약을 지키도록한다. 반사성 null이 아닌 모든 참조값에 대해 x.equals(x)는 true다. 대치성 x.equals(..
객체를 만들어야할 떄와 만들지 말아야할 때를 구분하기 위해, 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법, 제때 파괴됨을 보장하고 파괴전에 수행해야할 정리 작업을 알아보자. 1. 생성자 대신 정적 펙터리 메서드를 고려하라. 정적 펙터리 메서드를 통해 값을 할당하게되면 다음과 같은 이점이 있다. - 이름을 가질 수 있기에 반환될 객체의 특성을 쉽게 묘사할 수 있다. - 호출 될 때마다 인스턴스를 새로 생성하지 않아도된다. - 반환 타입의 하위 객체를 반환할 수 있다. - 입력 매개변수마다 매번 다른 클래스의 객체를 반환할 수 있다. - 정적 패터리 메서드를 작성하는 시점에 반환할 객체의 클래스가 존재하지 않아도된다. 2. 생성자 매개변수가 많다면 빌더를 고려해라 점층적 생성자 패턴도 있지만 매개변..
소프트웨어 개발에서 가장 자주 사용하면서 빈번히 문제를 일으키는 요소 중 하나가 바로 문자열이다. 이번에는 자바를 다시 공부하면서 StringBuilder 올바른 문자열 처리에 대해 공부해고자한다. 1. 중복된 문자열은 삭제한다. 보통 사용자와 관련된 로그인, 회원가입, 로그아웃등의 기능은 유기적으로 연결되어있데 유형 정보를 각 메서드마다 문자열로 관리한다면 이를 추가하거나 수정하는데 단순한 실수로도 오류가 생길 수 있다. 이를 위해서는 상수를 통해 중복된 문자열이 있다면 중복된 문자열을 없애준다. public class DuplicateCheck { //... private static String ROLE_ADMIN = "R01"; private static String ROLE_USER = "R02..
자바를 다시 공부하면서 흔히 실수하고 잘못 사용되는 기초적이고 필수적인 부분들을 습관화해보고자한다. 처음에는 프로그래밍 규칙에서부터 계속해서 포스트를 작성하여 살펴보고자한다. 1. 반복문 for문에서 사용하는 i,j 와 같은 증감 변수에 네이밍을 하자. i와 j는 일단 가시적으로 비슷하게 생겼고 정확히 어떤 의미를 하는가 이해하기 어렵다. 또한 왜 for문에 이만큼 증감시켜서 동작시키는지도 어렵다. 협업 시에 어떻게 어느정도 반복되고 있는가 읽기에 어려움을 줄 수 있다. 더욱 구분하기 쉬운 증감변수명 혹은 Enhaced For(foreach)를 사용하자 for (preNumber = 2; preNumber < 10; preNumber++) { for (postNumber = preNumber + 1; p..
어떻게 협력을 생각하고 객체를 나눌 수 있을까? 결론부터 말하자면, 책임과 협력 관계를 통해 객체를 나눠 볼 수 있다. MVC 패턴을 통해 협력의 구조를 살펴보고 생각해보자. MVC 패턴이란 무엇일까? MVC(모델-뷰-컨트롤러) 패턴은 소프트웨어 디자인 및 개발 패턴 중 하나로, 객체지향적인 프로그래밍을 위해 설계하는 과정에서 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나다. 사용자가 보는 UI를 담당하는 View 데이터를 정의하고 가공하는 Model 입력에 대해 어떤 것을 수행할 것인지 로직을 포함하는 Controll로 구성된다. 더 자세히 설명하면 아래와 같다. 모델 모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다. 데이터의 상태가 변경되면, 모델을 일반적으로 뷰에게 알리는 협력을 하며 가..
클린코드 책을 읽으면서 어떻게 코드를 더 가독성있게 짤 수 있을까 고민했지만, 정작 코드 컨벤션은 주의 깊게 찾아보지 않았다. (아마 IDE에서 알아서 짜주기에 별 크게 신경을 쓰지 않았던 것도 있다) 그래서 이번을 기회로 의외(?)로 몰랐던 자바 코딩 컨벤션만 찾아 기록하고자 한다. (나머지는 습관화되어 적지 않았으니, https://naver.github.io/hackday-conventions-java/ 을 참고) 선언 식별자의 이름을 한글 발음을 영어로 옮겨서 표기하지 않는다. 한국어 고유명사는 예외이다. 나쁜 예 : moohyungJasan (무형자산) 좋은 예 : intangibleAssets (무형자산) 패키지 이름은 소문자로 구성하며, 단어별 구문을 위해 언더스코어(_)나 대문자를 섞지 않..