일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 신입
- 공채
- Public
- 컴퓨터공학
- package-private
- Effective Java
- 운영체제
- 스프링
- 뮤텍스
- 이펙티브 자바
- 디지털
- CS
- 세마포어
- 깃허브
- 정보처리기사
- 스터디
- 컴퓨터과학
- 프로그래밍
- 개발
- java
- 신입사원
- 메모리
- 자바
- github
- spring
- 깃
- IT
- OS
- 알고리즘
- 우리카드
- Today
- Total
목록전체 글 (116)
주니어 개발자 성장기
개요인터페이스 상속이 아닌 구현 상속보다는 컴포지션을 사용하는 것이 낫다. 상속의 문제점 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 상위 클래스에서 제공하는 메서드의 구현이 바뀌거나 새로운 메서드가 생긴다면 하위 클래스가 의도한 대로 동작하지 않을 확률이 높다. 결국 상속하려면 상위 클래스의 내부 구현을 알아야 하며 내부 구현이 바뀌면 변경에 대응해야 한다. 하지만 변경을 인지하기도 어렵다. 다음 코드는 상속의 잘못된 예시를 보여주는 클래스다.public class InstrumentedHashSet extends HashSet { // 추가된 원소의 수 private int addCount = 0; public Instrume..
17. 변경 가능성을 최소화하라. 개요 불변 클래스란 소멸될 때까지 인스턴스 내부의 값이 변경되지 않는 클래스다. 쓰는 이유는 간단하다. 쉽고 버그가 발생할 여지가 적어 안전하다. 특히, 멀티 쓰레드 환경에서 안전하게 쓸 수 있다. 캐싱해놓는다면 여러 쓰레드에서 공유하며 사용할 수도 있다. 규칙 1. 객체의 상태를 변경하는 메서드를 제공하지 않는다. setter같이 객체의 상태를 변경하는 메서드를 제공하지 않는다. 2.클래스를 확장(상속)할 수 없도록 한다. 불변 클래스를 상속하면 가변 클래스로 만들 수 있다. 따라서, final 로 클래스를 선언하거나 private생성자를 만들면 상속을 막아 가변 클래스가 되는 것을 방지할 수 있다. 3.모든 필드를 final로 선언한다. 변경하지 못하도록 final ..
개요 이번 Cheffi 프로젝트를 진행하면서 꼭 해보고 싶었던 것 중 하나가 CI/CD 파이프라인 구축이었다. 저번 프로젝트(Glims)에서 배포를 내가 담당했었는데 낮에는 회사일로 바쁘고 밤에는 회사 프로젝트를 위해서 Vue.js 공부를 하다보니 CI/CD 공부를 할 수 있는 물리적인 시간이 부족했었고, 프로젝트 진행 내내 수동 테스트와 배포를 반복했었다. 직접 경험한 수동 배포의 문제점 1. 서버 업데이트가 늦다. 매번 수동 배포를 하다보니 팀원이 기능을 추가하거나 디버깅을 해도 수정이 반영되려면 항상 내가 배포를 해야했다. 내가 변경을 인지하고 작업할 수 있는 상황이어야만 배포가 가능해지니 기능 업데이트가 나라는 병목현상(?)을 겪게 되는 것이다. 내가 개인 사정으로 바쁠때는 나의 배포를 하염없이 ..
개요 public 클래스에서는 public필드가 아닌 public 접근자를 만들어 주는 것이 바람직하다. public 필드를 API로 제공하는 대표적인 예시는 java.awt.package 패키지의 Point, Dimension 클래스를 들 수 있다. 이유 캡슐화의 이점을 제공하지 못한다. (아이템 15) 필드를 변경하려면 API를 변경해야 한다. 필드에 접근할 때 부수 작업을 할 수 없다.public 접근자 메서드를 API로 공개한다면 해당 필드에 접근 하기 전에 불변식을 수행하는 것과 같은 부수작업을 수행할 수 있다. package-private 클래스와 priavate 중첩 클래스 책에서는 package-private 클래스와 priavate 중첩 클래스는 데이터 필드를 노출해도 문제가 없다고 한다..
개요잘 설계된 컴포넌트는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 완벽히 숨겨서 구현과 API를 깔끔히 분리한다. 컴포넌트간 통신은 오직 API를 통해서만 이루어지며 내부 동작 방식에는 전혀 관심이 없다. 이것을 정보 은닉 혹은 캡슐화라고 한다. 이것은 소프트웨어 설계의 근간이 되는 원리라고 한다. 그리고 자바에서 캡슐화를 달성하기 위해 필요한 원칙 중 하나가 바로 클래스와 멤버의 접근 권한 최소화이다. 정보 은닉의 장점 시스템 개발 속도를 높인다.→ 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다.컴포넌트간에 설계된 인터페이스를 통해서 통신하기 때문에 사용하는 측과 구현하는 측 모두 인터페이스에 맞춰서 개발하면 된다. 이는 각 모듈의 동시 개발을 가능케한다.(팀 단위 개발에서 효율적)..
개요 Object에 포함되는 인터페이스는 아니지만, 널리 사용될 수 있는 인터페이스이다. Object.equals에 더해서 순서까지 비교할 수 있으며 Generic을 지원한다. CompareTo규약 반사성 대칭성 추이성 일관성 권장 compareTo가 0을 반환한다면 equals도 true를 반환하도록 구현하는 것이 좋다. BigDecimal 클래스의 경우 equals와 compareTo의 결과가 다를 수도 있도록 구현되었다. BigDecimal oneZero = new BigDecimal("1.0"); BigDecimal oneZeroZero = new BigDecimal("1.00"); System.out.println(oneZero.compareTo(oneZeroZero)); // Tree, Tre..