생애 첫 회사 면접을 보면서, 면접 준비중에 떠올랐던 생각을 정리하고 회고하는 글입니다. 더불어 추후 목표를 정합니다. 1. 고민을 하게 된 계기 개발자로서 살기로 시작한지 약 만 3년 하고도 1개월,어느덧 대학교 4학년 1학기다. 성장을 위해서, 다양한 도전을 해왔다.학생회 개발부, 개발 동아리, 개발, 앱 출시, 스터디...etc 그러던 때, 기회가 생겨 2024 팀네이버 공채에 지원했다. 이력서를 작성하는데만 2주가 걸렸고,코딩테스트를 준비하는데 한 달이 걸렸다.이후 결과는 긍정적이었다. 합격 메일 일주일 후 면접이 준비되었기 때문에, 긴박하게 CS를 공부하기 시작했다. 잊고 있던 CS를 공부하던 중 이런생각이 들었다. "무엇이 나를 개발하게 만들었는가?""나는 어떤 개발자인가?""..
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..
왜 테스트 코드를 작성해야할까? 그리고 어떻게 작성하면 좋을까? 한 번 생각하고 알아보자. Test code란? 소프트웨어의 기능과 동작이 개발자가 본래 예상하고 원하는대로 수행하는가 테스트하는 코드다. 왜 Test code를 만들어야 할까? 만약 1000줄의 코드를 작성했다고 치자. 입력은 20줄을 받고 출력이 이제 한 줄 나올 것이다.(너무 극단적인가ㅎ) 그럼 이제 해당 프로그램이 정상 동작하는지 확인 할 때마다 20줄을 입력해야할까? 그리고 중간중간에 생기는 에러에 대해서 코드 사이사이에 동작 확인 용 출력 메시지를 만들어야할까? 물론 작은 기능에서는 가능할 수도 있다고 본다. 그러나 해당 행위가 효율적인가에 대해서 문제를 놓고 봤을 때, 비효율적이다 생각한다. 다시금 왜 테스트 코드를 작성해야하는..
어떻게 협력을 생각하고 객체를 나눌 수 있을까? 결론부터 말하자면, 책임과 협력 관계를 통해 객체를 나눠 볼 수 있다. MVC 패턴을 통해 협력의 구조를 살펴보고 생각해보자. MVC 패턴이란 무엇일까? MVC(모델-뷰-컨트롤러) 패턴은 소프트웨어 디자인 및 개발 패턴 중 하나로, 객체지향적인 프로그래밍을 위해 설계하는 과정에서 역할분담을 할 때 가이드라인을 제시하는 방법 중 하나다. 사용자가 보는 UI를 담당하는 View 데이터를 정의하고 가공하는 Model 입력에 대해 어떤 것을 수행할 것인지 로직을 포함하는 Controll로 구성된다. 더 자세히 설명하면 아래와 같다. 모델 모델은 앱이 포함해야할 데이터가 무엇인지를 정의한다. 데이터의 상태가 변경되면, 모델을 일반적으로 뷰에게 알리는 협력을 하며 가..
클린코드 책을 읽으면서 어떻게 코드를 더 가독성있게 짤 수 있을까 고민했지만, 정작 코드 컨벤션은 주의 깊게 찾아보지 않았다. (아마 IDE에서 알아서 짜주기에 별 크게 신경을 쓰지 않았던 것도 있다) 그래서 이번을 기회로 의외(?)로 몰랐던 자바 코딩 컨벤션만 찾아 기록하고자 한다. (나머지는 습관화되어 적지 않았으니, https://naver.github.io/hackday-conventions-java/ 을 참고) 선언 식별자의 이름을 한글 발음을 영어로 옮겨서 표기하지 않는다. 한국어 고유명사는 예외이다. 나쁜 예 : moohyungJasan (무형자산) 좋은 예 : intangibleAssets (무형자산) 패키지 이름은 소문자로 구성하며, 단어별 구문을 위해 언더스코어(_)나 대문자를 섞지 않..