일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- java
- 메모리
- 자바
- 우리카드
- 신입
- github
- CS
- 스터디
- 개발
- 프로그래밍
- 깃허브
- 디지털
- Public
- 운영체제
- spring
- 알고리즘
- 깃
- Effective Java
- 컴퓨터공학
- 이펙티브 자바
- IT
- 공채
- 스프링
- 정보처리기사
- OS
- 세마포어
- package-private
- 컴퓨터과학
- 뮤텍스
- 신입사원
- Today
- Total
목록Java (30)
주니어 개발자 성장기
안녕하세요. 오늘은 자바에서 Stack과 Deque를 간략하게 비교할까합니다.두 자료구조의 정의나 기초적인 동작 방식은 생략하고 바로 본론으로 들어가겠습니다. StackStack은 LIFO 구조의 자료형으로 많은 곳에서 활용됩니다. 저와 같은 주니어 레벨의 개발자한테는 무엇보다도 코딩테스트에서 직접 쓸 일이 많아 보입니다.스택을 활용하는 프로그래머스 문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr DequeDeque는 삽입, 삭제 방향이 정해져 있는 Stack나 Queue와 달리 양방향 삽입, 삭제가 가능한 자료구조입니다. 그래서 개발자가 사용하기에..
개요 가변인수와 제네릭을 함께 사용하면 힙 오염이 발생할 여지가 있으므로 신중히 사용해야만 한다.(2가지 조건을 준수하자.) 힙오염이 발생 가능한 이유? 가변인수를 사용하게되면 원래는 불가능한 제네릭으로 배열을 만드는 것이 가능해진다. 책에서 힙오염이 발생한다고 지목한 예제코드를 보자. // 코드 32-1 제네릭과 varargs를 혼용하면 타입 안전성이 깨진다! (191-192쪽) static void dangerous(List... stringLists) { List intList = List.of(42); Object[] objects = stringLists; objects[0] = intList; // 힙 오염 발생 String s = stringLists[0].get(0); // ClassCas..
개요 이펙티브 자바를 공부하던 중 익명 클래스, 지역 클래스, 중첩 클래스 등의 개념이 등장해서 구글링을 하던 중 이해가 잘되는 레퍼런스들을 찾았다. 서버 개발에서는 정적 멤버 클래스, 비정적 멤버 클래스를 제외하고는 거의 쓰일 일이 없을거라 예상한다. 그렇지만 아래 레퍼런스에 의하면 안드로이드 스튜디오에서 쓰일 수도 있다고 한다.(확실하지는 않음) https://sjh836.tistory.com/145 중첩클래스를 알아보자 (내부클래스, 정적 중첩클래스, 지역클래스, 익명클래스) 일반클래스는 Package member class 라고들 하며, 아래 항목에서 제외했다. 구글링해보면 클래스간에 관계나 큰 틀에서의 구조를 안잡고 나열하는 식이 많은 것 같다ㅋㅋ1. 중첩 클래스는 왜 쓰는가? sjh836.ti..
개요추상클래스 대신 인터페이스를 우선적으로 활용하자. 인터페이스의 장점이 더 많다. 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다.2개 이상의 클래스를 동시에 상속받는 것은 불가능하다. 여러 클래스를 상속 받아야 하는 클래스가 이미 추상 클래스를 상속받았다면 이미 둘 간의 계층구조가 생겨 상속에 어려움이 생긴다. 반면 인터페이스는 한 클래스에서 여러번 구현하게 할 수 있고 기존에 어떤 클래스를 상속받고 있는 지에 관계 없이 기능을 추가할 수 있다. 인터페이스는 믹스인이 가능하다. 믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 ‘주된 타입’ 외에도 특정 선택적 행위를 제공한다고 선언하는 효과를 준다. 인터페이스를 통해 어떤 클래스의 갖고 있는 주된 역할외에 ..
개요이전 아이템에서 상속 대신 컴포지션을 사용하라고 했지만 그래도 상속은 객체지향 프로그래밍의 가장 큰 특징들 중 하나이다. 코드의 재사용성을 높이는 방법 중 하나이다. 따라서, 상속을 허용할 때는 ‘잘’하는 것이 필요하다. 상속용 클래스는 내부 구현을 문서로 남겨야 한다. 하지만 이런 식은 “좋은 API문서란 ‘어떻게’가 아닌 ‘무엇’을 하는지를 설명해야 한다”라는 격언과는 대치되지 않나? 그렇다. 상속이 캡슐화를 해치기 때문에 일어나는 안타까운 현실이다. - 이펙티브 자바 3판 123p 어차피 상속으로 인해 캡슐화가 깨지기 때문에 내부 구현을 제대로 알아야 적절하게 오버라이딩할 수 있기 때문에, 상속용 클래스는 내부 구현을 자세하게 문서로 남겨야 한다는 것이다. 문서에 @implSpec과 함께 내부 ..
개요인터페이스 상속이 아닌 구현 상속보다는 컴포지션을 사용하는 것이 낫다. 상속의 문제점 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 상위 클래스에서 제공하는 메서드의 구현이 바뀌거나 새로운 메서드가 생긴다면 하위 클래스가 의도한 대로 동작하지 않을 확률이 높다. 결국 상속하려면 상위 클래스의 내부 구현을 알아야 하며 내부 구현이 바뀌면 변경에 대응해야 한다. 하지만 변경을 인지하기도 어렵다. 다음 코드는 상속의 잘못된 예시를 보여주는 클래스다.public class InstrumentedHashSet extends HashSet { // 추가된 원소의 수 private int addCount = 0; public Instrume..