목록2024/05 (26)
자바칩
상속 조합을 사용하는 상황 구분상속(Inheritance)상속은 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 관계를 의미한다.상속은 확장을 고려하고 설계가 확실한 "is-a" 관계일 때와, API에 아무런 결함이 없는 경우, 결함이 있다면 하위 클래스까지 전파되어도 괜찮은 경우에 사용한다.예: Bird 클래스는 Animal 클래스를 상속받을 수 있다. 이는 "새는 동물이다"라는 관계를 표현한다.조합(Composition)조합은 새로운 클래스가 기존 클래스를 포함하는 관계를 의미한다. 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조한다.조합은 "has-a" 관계를 나타낼 때 사용한다.예: Car 클래스가 Engine 클래스를 포함할 수 있다. 이는 "자동차는 엔진을 가지..
가비지 컬렉션의 작동 원리가비지 컬렉션(Garbage Collection, GC)은 프로그램이 더 이상 사용하지 않는 메모리를 자동으로 해제하는 과정이다. 자바에서는 JVM이 가비지 컬렉터를 사용하여 이 작업을 수행한다. 기본적인 작동 원리는 다음과 같다.객체 생성: 프로그램이 새로운 객체를 생성하면 힙(heap) 메모리 영역에 할당된다.사용 중인 객체 추적: JVM은 프로그램이 참조하는 모든 객체를 추적한다.미사용 객체 식별: 더 이상 참조되지 않는 객체는 "가비지"로 간주된다.가비지 수집: 가비지 컬렉터가 주기적으로 실행되어 미사용 객체를 메모리에서 제거하고, 메모리를 재사용할 수 있게 한다.G1GC와 기존의 가비지 컬렉션 방식 비교G1GC(Garbage-First Garbage Collector)는..
Java 8과 Java 17 버전의 주요 기능 차이1. Java 8의 주요 기능 람다 표현식: 함수를 간단하고 짧게 작성할 수 있게 해주는 기능. 예를 들어, 리스트의 각 요소를 출력할 때 이렇게 사용 가능. list.forEach(element -> System.out.println(element)); 스트림 API: 데이터를 처리 방법을 더 쉽게 만들어주는 기능.예를 들어, 리스트에서 짝수만 골라내는 코드는 이렇게 작성 가능. list.stream() .filter(num -> num % 2 == 0) .forEach(System.out::println); 새로운 날짜와 시간 API: 날짜와 시간을 더 편리하게 처리할 수 있는 기능. ..
정리해 봅시다 1. Map 형태의 자료 구조는 무엇과 무엇으로 구성되어 있나요?키(Key), 값(Value)자료구조특징List- 목록 관리- Collection 인터페이스 확장- 순서 중요 (배열처럼 인덱스 위치 사용)Set- 목록 관리- Collection 인터페이스 확장- 순서 상관 X- 데이터 중복 XQueue- 목록 관리- Collection 인터페이스 확장- 순서 중요 (맨 처음과 맨 마지막 위치 접근)Map- 키(Key)-값(Value) 쌍 데이터 관리- Collection 인터페이스 확장 X. 별도의 인터페이스- 순서 상관 X- 키 중복 X, 값 중복 O 2. Map에서 데이터를 저장하는 메소드는 무엇인가요?put(K key, V value)*사용 예시Map map = new HashMap..
정리해 봅시다 1. 순서와 상관 없는 여러 데이터를 하나의 객체에 저장할 때 사용하는 Collection의 하위 인터페이스는 무엇인가요?Set 인터페이스 2. HashSet 클래스는 생성자를 통하여 저장 가능한 데이터의 초기 크기를 지정할 수 있나요?HashSet 클래스는 생성자를 통하여 저장 가능한 데이터의 초기 크기를 지정할 수 있다.*사용 예시HashSet set = new HashSet(100);* 생성자 종류생성자설명 HashSet() 데이터를 저장할 수 있는 16개의 공간과 0.75의 로드 팩터를 갖는 객체를 생성한다.HashSet(Collections c)매개 변수로 받은 컬렉션 객체의 데이터를 HashSet에 담는다. HashSet(int initialCapacity) 매개 변수로 받은 ..
난이도: Gold 4문제: https://www.acmicpc.net/problem/2636 겉에 있는 치즈부터 녹여서 치즈를 점점 안쪽으로 녹이면 되는 문제이다. 초기 배열은 이렇다.세로(N) * 가로(M) 크기의 2차원 배열을 선언해주어야 한다. 치즈는 이렇게 겉에 있는 것만 녹이면 된다고 한다.나는 이 문제를 0주변에 있는 1들을 없애면 되는게 아닌가 했는데, 가운데에도 0이 있다.겉에 있는 0 주변에 있는 1들만 없애야 한다. 가운데에 있는 0은 제외하고 겉에 있는 0 주변에 있는 1을 없애야 한다.이렇게 하려면 어떻게 해야할까? 일단 공기 칸을 체크할 2차원 배열을 만든다.겉에 있는 0들을 bfs를 사용해서 공기 칸을 체크할 배열을 true로 체크하면 된다.그리고, true로 체크된 칸 주변..
정리해 봅시다 1. Collection 인터페이스를 구현하는 대표적인 3개의 자료 구조에는 어떤 것들이 있나요?List(목록), Set(셋), Queue(큐) 2. 배열과 같이 순서가 있는 목록형을 나타내는 대표 인터페이스는 무엇인가요?List 인터페이스 3. ArrayList라는 클래스의 생성자 중 매개변수가 없는 기본 생성자를 사용하면 기본적으로 몇 개의 저장 공간을 가지나요?10개의 저장 공간*사용 예시ArrayList list = new ArrayList(); 4. 만약 ArrayList 클래스의 저장 공간 개수를 처음부터 지정하려면 어떤 생성자를 사용하면 되나요?ArrayList(int initialCapacity)이 생성자는 매개 변수로 넘어온 initialCapacity 개수만큼의 저장..
난이도: Gold 4문제: https://www.acmicpc.net/problem/3190 머리를 늘리고 꼬리를 자르면 되는 문제이다.일단 뱀과 사과 정보를 저장할 2차원 배열을 만들자. 2차원 배열을 만들고 뱀의 몸이 있는 칸을 1, 사과가 있는 칸을 2로 설정해놓았다.뱀이 사과가 있는 칸에 도달하면 2가 있던 칸이 1로 바뀌고 점점 1의 개수가 늘어나게 된다.그리고, 이 게임이 몇 초 경과하고 끝이 나는지 계산할 second 변수를 만들었다. 사과가 없으면 1은 계속 그냥 이동하고, 사과가 있으면 2가 있던 칸을 1로 만들고 이동하면 된다.이렇게 하면 1이 점점 많아지게 된다.이 경우에는 9번 움직인 뒤 벽에 부딫쳐서 게임이 끝나므로 9초 뒤에 끝이 나게된다. 이 문제는 맨 앞에 요소를 추가..