일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- IT
- 컴퓨터공학
- 운영체제
- 자바
- 스프링
- 메모리
- spring
- 알고리즘
- OS
- package-private
- 개발
- 깃허브
- 디지털
- 세마포어
- 깃
- 우리카드
- 뮤텍스
- Effective Java
- 신입
- 컴퓨터과학
- github
- java
- 정보처리기사
- 스터디
- 공채
- 신입사원
- Public
- CS
- 프로그래밍
- 이펙티브 자바
- Today
- Total
목록전체 글 (116)
주니어 개발자 성장기
방어적 복사란? 개요방어적 복사(Defensive Copy)란 Java에서 불변 객체(immutable objects)에서 쓰이는 용어이다. 불변 객체는 일단 생성이 된 뒤에는 객체 내부의 상태가 변경되어서는 안된다. 그리고, 방어적 복사는 불변 객체 내부의 상태(즉, 필드)에 변경을 방지하기 위해서 사용하는 기법이라고 할 수 있다. 문제 상황다음과 같은 FooCalendar라는 클래스가 있다고 가정해보자.public final class FooCalendar { private final Date standardDate; public FooCalendar(Date date) { standardDate = date; } public Date getStandardDate() { return standardD..
구현 - 불변 객체 Cloenable은 텅 비어 있는 인터페이스지만 clone을 이용하려면 반드시 구현(implements)해주어야 한다. 그 다음 clone 메서드를 super.clone을 사용해 오버라이딩해줘야 한다. 접근 제한자는 public 으로 설정, 반환 타입은 자신의 클래스로 변경한다. Clone 규약 x.clone() != x clone 반드시 원본과 다른 인스턴스를 반환해야 한다. (레퍼런스 자체가 달라야한다.) x.clone().getClass() == x.getClass()가 반드시 true이여야 한다. 원본의 클래스와 동일한 인스턴스를 반환해야 한다. x.clone().equals(x)가 true가 아닐 수도 있다. 복사를 한 인스턴스가 원본과 달라야만 한다면 true가 아닐수도 있..
기본 구현 Object에서 기본적으로 제공하는 toString은 클래스명 + 16진수hashCode값을 반환한다. ← 그닥 유용하지 않다. 재정의 해당 데이터에 적합한 형태로 표현해주는 것이 좋다. toString에 들어가는 필드(혹은 정보)는 외부에 공개할 수 있는 데이터만 공개하는 것이 좋다. 외부에 노출 할 수없는 정보(사용자 정보)는 최대한 숨기자. Getter를 제공하여 toString에 나오는 정보를 접근 가능하게 하자. 어차피 해당 정보를 얻기 위해서 클라이언트가 정해진 포맷에 따라 toString을 파싱할 것이다. IDE나 Lombok을 사용할 수도 있지만 자동으로 생성되는 포맷이 원하는 포맷이 아닐 수도 있다. 그럴 때는 직접 정의하자. 아래와 같이 정적 팩토리 메서드로 정해진 포맷이 입..
개요equals와 hashCode는 항상 같이 구현되어야 한다. IDE, Lombok, AutoValue 등 서도 같이 구현되는 것을 전제로 한다. 일반 규약 equals 비교에 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야 한다. (변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.) equals가 두 객체를 같다고 판단했다면, hashCode의 값도 같아야 한다. 두 객체에 대한 equals가 다르더라도, hashCode의 값은 같을 수 있지만 해시 테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다. 제약사항 equals에서 사용한 필드들을 모두 사용해야 한다. 이렇게 해야 인스턴스 간의 차이점이 hashCode에 반영되어 다른 인스턴스가 같은 해쉬코드를 가지..
개요 Effective final 이란 사실상 final을 의미한다. 자바 8부터 추가된 기능이다. 우리가 어떤 변수(레퍼런스 타입이든 원시 타입이든)의 선언이나 매개변수 앞에 final 키워드를 사용하면 변경이 불가능하다. 사실상 final은 변수가 선언된 뒤에 변경되지 않는다면 final 변수로 취급하는 것이다. 그렇다면 과연 이 Effective final이라는 기능이 왜 필요할까? 로컬 클래스, 익명 클래스, 람다 로컬 클래스, 익명 클래스와 람다는 외부에서 변수를 참조하기 위해서는 반드시 final 변수여야 컴파일 에러가 발생하지 않는다. public void method() { final int number = 10; // 로컬 클래스 class Local { public void someth..
*개인 참고, 공부용 포스팅입니다. 아래 포스팅을 참고해서 yml 파일과 깃허브 시크릿을 등록한다. https://mumomu.tistory.com/132 [Github Actions] Github Secrets에 secret파일 등록(secret.yml 등) Github Secrets에 Secret파일 등록으로 CI/CD 깃허브에 올릴 때는 조심해야하는 파일들이 있는데 AWS, API 등에 접근할 수 있는 키를 가진 환경변수 등이 공유될 경우 큰 문제가 생길 수 있다. 그렇기 때문 mumomu.tistory.com 내가 헤맨 부분은 깃허브 시크릿을 등록하는 부분이었는데 처음에 yml 파일을 그대로 복붙 해 등록해서 문제가 생겼었다. 그런데 위 포스팅에서는 `base64 --decode` 명령어를 이용하..