51. Instance(인스턴스 변수)
인스턴스(객체)를 생성할 때 생성되며 같은 클래스 내에서 호출 가능
각 인스턴스(객체)마다 독립적 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
클래스의 각 인스턴스(객체)마다 별도로 할당되는 변수
객체의 속성이나 상태를 나타내며 객체의 생명 주기에 따라 변할 수 있다.
클래스 내부에서 선언되고, 객체가 생성될 때 메모리에 할당된다.
52. 지역변수(Local Variable)
클래스 영역 외의 영역 (메소드, 생성자, 초기화 블럭 내부)에 생성하여 그 영역 안에서만 사용 가능한 변수
프로그램 내에서 특정 범위(일반적으로 함수나 메서드 내부)에서만 접근할 수 있는 변수
선언된 함수, 메서드, 혹은 블록의 내부에서만 유효하며, 외부에서는 접근할 수 없다. 지역 변수는 해당 함수나 블록이 실행될 때 생성되고, 함수나 블록의 실행이 끝나면 메모리에서 사라진다. 이러한 특성 때문에 지역 변수는 주로 임시 데이터를 저장하거나 특정 블록에서만 사용할 데이터를 저장하는데에 사용된다.
53. Deprecated
사용을 권장하지 않음 (API 문서에서 주로 사용)
어떤 기능이나 메서드가 더 이상 사용되지 않거나 나중에 버전에서 제거될 것임을 나타낸다. Deprecated 된 요소는 여전히 동작할 수 있지만, 미래에는 더 이상 지원되지 않을 것이므로 다른 대안을 찾아 사용하는 것이 좋다.
54. Collection / Map
java의 자료구조는 크게 Collection과 Map으로 나뉘며 자바의 Collection 프레임워크는 여러 객체를 담을 수 있는 자료구조를 제공한다. Collection은 다시 List, Set, Queue의 세 가지 주요 인터페이스로 나뉜다.
Map은 키-값(key-value) 쌍을 저장하는 자료구조를 나타낸다. 각 키는 고유한 값에 매핑되어 있으며, 키를 사용하여 값을 검색하고 저장할 수 있다.
1) List
- 순서가 있는 데이터의 모음을 나타내며, 중복된 요소를 허용
- 인덱스를 사용하여 요소에 접근할 수 있다.
- 대표적인 구현 클래스로는 `ArrayList`, `LinkedList`, `Vector` 등이 있다.
List<String> list = new ArrayList<>();
list.add("첫 번째");
list.add("두 번째");
list.add("세 번째");
System.out.println(list.get(0)); // 출력: 첫 번째
2) Set
- 순서가 없는 데이터의 집합을 나타내며, 중복된 요소를 허용하지 않는다.
- Set은 주로 중복을 제거하기 위해 사용된다.
- 대표적인 구현 클래스로는 `HashSet`, `LinkedHashSet`, `TreeSet` 등이 있다.
Set<String> set = new HashSet<>();
set.add("사과");
set.add("바나나");
set.add("사과"); // 중복된 요소이므로 추가되지 않음
3) Queue
- FIFO(First-In-First-Out) 방식의 데이터 구조로, 데이터를 먼저 추가한 것이 먼저 나가게 된다.
- 주로 대기열(큐)을 구현하는 데 사용된다.
- 대표적인 구현 클래스로는 `LinkedList`, `PriorityQueue` 등이 있다.
Queue<String> queue = new LinkedList<>();
queue.add("첫 번째");
queue.add("두 번째");
System.out.println(queue.poll()); // 출력: 첫 번째
4) Map
- key-value 쌍의 데이터를 저장
- 각 키는 유일해야 하며, 각 키는 하나의 값과 매핑
- 대표적인 구현 클래스로는 `HashMap`, `LinkedHashMap`, `TreeMap` 등이 있다.
Map<String, Integer> map = new HashMap<>();
map.put("한국", 82);
map.put("미국", 1);
map.put("일본", 81);
System.out.println(map.get("한국")); // 출력: 82
55. Stack
FILO, LIFO 구조 (ArrayList, Vector로 구현 가능)
데이터를 저장하는 자료구조로, 데이터가 쌓이는 형태로 관리된다. 스택은 마지막으로 추가된 항목이 가장 먼저 제거되는 LIFO(Last In, First Out) 구조를 가지고 있다. 주로 함수 호출, 재귀 알고리즘, 미로 탐색, 실행 취소 등 다양한 알고리즘에서 사용된다.
스택은 프로그램에서 임시 데이터를 저장하거나, 함수의 호출 정보를 관리하는 데에 사용된다. 또한, 컴퓨터의 메모리 구조에서 호출 스택(Call Stack)이라는 이름으로 주로 사용되며, 함수 호출과 관련된 정보를 저장하여 함수의 실행 순서를 추적하는 데에 사용된다.
56. Queue
FIFO 구조 (LinkedList로 구현 가능)
데이터를 저장하는 자료구조로, 데이터가 들어온 순서대로 처리되는 FIFO(First-In-First-Out) 구조를 가지고 있다. 이는 데이터가 큐에 추가되는 순서대로 큐에서 제거되는 것을 의미한다. 즉, 가장 먼저 들어온 데이터가 가장 먼저 처리되며 주로 대기열을 구현하는 데 사용된다. 큐는 데이터의 순서를 중요하게 다루어야 할 때 유용하며, 대기열 관리, 작업 스케줄링, 데이터 버퍼링 등 다양한 응용 분야에서 사용된다.
57. Stack Trace
프로그램에서 예외가 발생한 정확한 위치를 알려줌. 가장 마지막에 호출된 메소드의 에러가 가장 윗줄에 출력. 프로그램이 실행 중에 발생한 예외 또는 오류에 대한 정보를 제공하는 디버깅 도구. 어떤 함수 또는 메서드에서 예외가 발생했는지를 보여주며, 해당 함수 또는 메서드가 호출된 호출 스택(Call Stack)의 상태를 역순으로 나열한다.
주로 프로그램이 실행 중에 예외가 발생했을 때, 이 예외가 발생한 위치와 호출 스택의 정보를 개발자에게 제공하여 어떤 부분에서 문제가 발생했는지를 식별하고 디버깅하는 데 도움을 준다. 스택 트레이스는 오류를 해결하는 데 매우 유용하며, 개발자가 코드의 어떤 부분에서 문제가 발생했는지를 파악할 수 있도록 도와준다. 이 정보는 주로 로깅 또는 예외 처리 과정에서 사용된다.
58. Instanceof
객체가 어떤 클래스인지, 어떤 클래스를 상속 받았는지 확인
ex) object instanceof type -> object가 type이거나 type을 상속받는 클래스라면 true 리턴
객체가 특정 클래스의 인스턴스인지를 확인하는데 사용되며 객체의 유형을 확인할 수 있다.
결과는 true 또는 false로 반환
if (객체 instanceof 클래스이름) {
// 객체는 해당 클래스의 인스턴스입니다.
} else {
// 객체는 해당 클래스의 인스턴스가 아닙니다.
}
객체가 주어진 클래스 뿐만 아니라 해당 클래스를 상속한 하위 클래스의 인스턴스인지도 확인할 수 있다.
if (obj instanceof ParentClass) {
// obj는 ParentClass 또는 ParentClass의 하위 클래스의 인스턴스입니다.
}
다형성을 활용할 때, 객체의 실제 타입을 확인하기 위해 instanceof를 사용할 수 있다.
if (animal instanceof Dog) {
// animal은 Dog 클래스의 인스턴스입니다.
} else if (animal instanceof Cat) {
// animal은 Cat 클래스의 인스턴스입니다.
}
59. Concatenation
연결(concat)
문자열이나 데이터를 이어 붙이는 연산으로 주로 문자열 연결에 사용되지만, 다른 데이터 유형도 연결할 수 있다. 여러 개의 문자열이나 데이터를 결합하여 하나의 문자열 또는 데이터로 만들 때 활용된다.
1) 문자열 Concatenation
- 두 개 이상의 문자열을 합쳐서 새로운 문자열을 만드는 것
- 대부분의 프로그래밍 언어에서 `+` 연산자를 사용하여 문자열을 연결할 수 있다.
String firstName = "John";
String lastName = "Doe";
String fullName = firstName + " " + lastName; // "John Doe"
2) 데이터 Concatenation
- 문자열 이외의 데이터 유형도 concatenation 연산을 사용할 수 있다.
- 예를 들어, 정수나 실수를 문자열과 연결하여 문자열로 만들 수 있다.
int number = 42;
String result = "The answer is: " + number; // "The answer is: 42"
3) Concatenation in Different Programming Languages
- 프로그래밍 언어에 따라 concatenation 연산을 수행하는 방법이 다를 수 있다. Java에서는 `+` 연산자를 사용하고, Python에서는 `+` 연산자나 `%`나 `.format()`과 같은 문자열 포맷팅을 사용할 수 있다.
name = "Alice"
age = 30
message = "My name is {} and I am {} years old.".format(name, age)
# 또는 Python f-string 사용
message = f"My name is {name} and I am {age} years old."
60. Block
호출된 대상이 자신의 작업을 모두 마칠때까지 아무 일도 못하고 대기
프로그램이 특정 작업이 완료될 때까지 대기하는 상태
입출력 작업이나 네트워크 호출과 같은 시스템 호출에서 데이터를 기다리거나 완료될 때까지 대기하는 것
일반적으로 동기식(synchronous) 프로그래밍 모델에서 발생