본문 바로가기

전체 글

(150)
[클린코드 10장] 클래스 클래스 체계 변수 public static private static private 함수 공개 함수 비공개 함수 비공개 함수는 자신을 호출하는 공개함수 직후에 넣자. 캡슐화 캡슐화를 최우선시 하자. 테스트 코드에 꼭 필요하다면 함수나 변수를 protected로 선언하거나, 패키지 전체로 공개할 수도 있다. 클래스 생성시 고려할 사항 1. 클래스는 작아야 한다. 얼마나 작아야 하는가? 위 질문이 떠오른다면, 해법은 간단하다. 클래스가 맡은 책임을 세자. 책에서는 SuperDashboard 클래스를 예시로 들었다. 내가 생각한 예제는 주방 가전 제품이다. 만약 아래의 기능을 모두 가진 가전 제품이 있다면 어떨까 밥을 한다 빵을 굽는다. 달걀 후라이도 가능하다. 빙수를 만들 수 있다. 기능이 너무 많다 보니,..
[이펙티브 자바 스터디] 아이템 31~35 아이템 31. 한정적 와일드 카드를 사용해 API 유연성을 높여라 매개변수화 타입의 문제점 불공변이라 유연하지 않다. 복습 매개변수화 타입은 불공변(invariant)이다. 즉, "Type2가 Type1의 하위타입"은 List가 List의 하위 타입임을 보장하진 않는다. 왜 하위 타입임을 보장할 수 없을까 예를 들어, List와 List을 살펴보자. List에는 어떤 객체든지 넣을 수 있으나, List에는 String만 넣을 수 있다, 즉, 리스코프 치환 원칙에 어긋나므로, List은 List의 하위타입이 될 수 없다. 불공변의 예시 // 예시 public class Stack { public Stack(); public void push(E e); public E pop(); public boolean..
20220109 졸린다. 내일 JPA, 이펙티브 자바 스터디가 있는데, 이펙티브 자바 책은 볼 수록 암호에 가까운 느낌이다. 내가 아는 내용 나올 때는 "껌이네" 그랬는데 내 교만함을 비웃는 건지 31장은 진짜 모르겠다 도대체 몇 번째 읽는건지.. 흅... 그래도 계속 읽다보면 언젠간 알겠지..히히히히 (피곤하니 이제 정신을 놓는건가) 새 회사에 조인한지 한 주가 지났다. 아직 한 주밖에 되지 않아 팀에 대해 잘 모르지만, 분명한건 좋은 팀이란 것 :D 나도 열정을 쏟아부어 폭풍 성장해야겠다. + 추가 1. 입사 기념으로 컵 받았다. 로고가 심플하고 예쁘다. 이런 실용적인 선물 너무 좋다 + 추가 2. 나중에 적립금 나오면 매주 아보카도 사먹는 사치를 누려야겠다. 아보카도를 먹을 수 있다는 사실을 처음 발견한 사람에게는..
[JPA 기본] 5. 연관관계 매핑 기초 단방향 연관관계 목표 - 객체와 테이블 연관관계 차이를 이해한다. - 객체의 참조와 테이블의 외래 키를 매핑한다. 용어 - 방향: 단방향 , 양방향 - 다중성: 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) - 연관관계의 주인(Owner): 양방향 연관관계에서는 관리의 주인이 필요하다. 객체를 테이블에 맞추어 모델링할 경우의 문제점. - 식별자로 다시 조회하는데, 이는 객체 지향적인 방법은 아니다. 객체와 테이블의 데이터 검색 방식 - 테이블: 외래 키로 조인을 사용하여 연관 테이블을 찾는다. - 객체: 참조를 사용하여 연관 객체를 검색 객체지향 모델링시 주의점 1:N에서 N의 위치를 파악해야한다. 예. TEAM, MEMBER -> MEMBER 가 N 양방향 연관관계와 연관관계의 ..
2022.01.04 3년차 개발자로 이직하며 느낀점 새로운 회사에 입사한지 이틀째. 어제 정신없이 온보딩 과정을 마치고 (프로덕트팀 전반에 대해 기획/개발 각 분야에서 자세히 설명해주셨다. 자료 꼼꼼히 챙겨봐야지!) 오늘은 환경 세팅을 진행했다. 이전 회사와는 다르게, 개발 권한을 얻기 위해서는 타부서의 승인이 필요하다고 한다. 권한 요청 하나가 반려되었는데, 내 실수로 정보를 잘못 기입한 것이 원인! 다음부터는 문서를 차근차근 읽어야겠다. 덤벙거리는 습관은 3년차가 되어도 완전히 고쳐지진 않았다. 하하 멋진 사람들과 함께 일할 수 있어서 기뻤지만, 사실 부담감도 약간 (사실 많이!!) 있었다. 혹시라도 내가 실수하면 어떡하나 하는 마음. 시니어분들이 그런 내 마음을 귀신같이 알고는 부담감 느끼지 말것 + 천천히 적응할 것..
[이펙티브자바]아이템28. 배열보다는 리스트를 사용하여라. 배열 VS 제네릭 비교 1. 배열은 공변, 제네릭은 불공변이다. 배열은 공변(covariant)이다. 즉, A가 B의 하위 타입이면 A[]는 B[]의 하위 타입이다. 반면 제네릭은 불공변(invariant)이다. 즉, A가 B의 하위 타입이라도, List 와 List는 하위 관계가 성립되지 않는다. Object[] arr = new Long[1]; arr[0] = "문자열"; // 런타임 에러 발생 List ol = new ArrayList(); ol.add("문자열"); // 컴파일 에러 발생 리스트를 사용할 경우 컴파일 타임 에러를 사용하여 버그를 방지할 수 있다. 2 배열은 실체화(relify)되는 반면, 리스트는 그렇지 않다. 배열은 런타임에 타입을 체크한다. 하지만 제네릭은 원소타입을 컴파일 타..
[이펙티브자바]아이템27. 비검사 경고를 제거하라 최대한 많은 비검사 경고를 지우자. - 모든 비검사 경고는 런타임에 ClassCastException을 일으킬 수 있는 잠재적 가능성이 있다. 따라서 최선을 다해 제거하자. - 비검사 경고 예시) 아래 코드에서 HashSet의 타입을 명시해주라는 경고가 뜬다. // Set로 형변환이 필요하다는 경고 발생 Set exaltation = new HashSet(); // 다이아몬드 연산자를 사용한 수정 (자바 7부터 지원) Set exaltation = new HashSet(); 경고를 제거할 수 없지만, 타입 안전하다고 확신한다면 @SupressWarnings("unchecked") 애너테이션을 달아 경고를 숨기자. - 예외가 일어나지 않을 것이라 확신한다면 불필요한 경고는 지우는것이 좋다. 잠재적인 버그에..
[이펙티브자바]아이템26. 로타입은 사용하지 말라 제네릭(Generic)이란? (사전적 의미) - generic은 직역하면 '포괄적인. 일반적인' 의미이다. 제네릭(Generic)이란? (프로그래밍에서의 의미) - 하나의 자료구조에서 여러가지 타입을 지원하기 위해 탄생 - 특정 타입을 미리 지정해주는 것이 아니라, 사용자가 필요한 타입을 지정하도록 하는 것 // 같은 ArrayList인데 타입만 다르다. 하나의 자료 구조로 통일할 수는 없을까? ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); 제네릭타입(Generic Type) 제네릭 클래스, 제네릭 인터페이스를 통틀어 일컫는 말. 제네릭 클래스, 제네릭 인터페이스 - 클래스, 인터페이스 선언에 타입 매개변수가 쓰일 경우. - ..