☕ Java (자바 핵심 요약)
1. 클래스 선언과 제한자
- public 클래스: 소스 파일당 단 하나만 존재할 수 있으며, 파일명과 클래스명이 일치해야 합니다.
- final 클래스: 상속이 불가능합니다(서브 클래스를 가질 수 없음). 하지만 객체 생성(new)은 가능합니다.
- abstract 클래스: 추상 메서드를 가질 수 있는 클래스로, 객체 생성이 불가능하며 오직 상속을 통해서만 사용됩니다.
2. static (정적 멤버)의 제약
- static 메서드: 객체 생성 없이 호출 가능하지만, 내부에서는 static 멤버만 접근할 수 있습니다.
- this 사용 불가: 인스턴스가 생성되기 전의 시점일 수 있으므로 this 키워드를 사용할 수 없습니다.
3. 필드(변수)의 종류와 초기화
- 인스턴스 필드: 객체가 생성될 때(new) 만들어지는 non-static 필드입니다.
- static 필드: 클래스가 메모리에 로딩될 때 자동으로 딱 한 번 만들어지며 모든 인스턴스가 공유합니다.
4. 패키지와 import
- 외부 객체를 사용할 때는 import가 필요하지만, java.lang 패키지는 자바의 기본 패키지로 별도의 import 없이도 사용할 수 있습니다.
5. 상속(Extends)과 구현(Implements)
- extends: 클래스 상속 시 사용하며, 부모의 기능을 확장합니다.
- implements: 인터페이스 구현 시 사용하며, 선언된 모든 추상 메서드를 반드시 오버라이딩해야 합니다.
6. 다형성(Polymorphism)과 형변환
- 자식 객체를 부모 타입 변수에 담을 수 있습니다(Up-casting). 이때 부모 타입에 정의된 메서드만 접근 가능하지만, 오버라이딩된 메서드는 자식의 것이 실행됩니다.
- 반대로 부모 타입을 자식 타입에 담는 것은 불가능합니다(Down-casting 필요).
7. 생성자(Constructor)
- 객체 생성 시 자동으로 호출되며, 클래스 이름과 같고 리턴 타입이 없습니다.
- 개발자가 생성자를 하나라도 정의하면 기본 생성자는 자동으로 생성되지 않으므로 주의해야 합니다.
8. 스레드(Thread) 활용
- Thread 클래스 상속 또는 Runnable 인터페이스 구현을 통해 만듭니다.
- run() 메서드에 로직을 작성하고, 실행은 반드시 start()를 호출해야 합니다.
- Thread.sleep() 사용 시 반드시 InterruptedException 예외 처리를 해야 합니다.
9. 인터페이스(Interface)의 특징
- 모든 메서드는 기본적으로 public abstract이며 ;으로 끝납니다.
- 모든 필드는 public static final(상수)입니다.
- 단, default나 static 메서드는 예외적으로 구현부를 가질 수 있으며 내부에서 private 메서드를 가질 수 있습니다.
10. 네트워크 소켓(Socket) 통신
- 서버: ServerSocket을 생성하고 accept() 메서드로 클라이언트 접속을 대기합니다. 접속 시 Socket을 반환받습니다.
- 통신: 반환된 소켓을 통해 읽고 쓰기를 진행하며, 사용 후에는 반드시 close()로 자원을 반납해야 합니다.
⚛️ React (리액트 핵심 요약)
11. 컴포넌트와 JSX 규칙
- 컴포넌트는 재사용 가능한 최소 단위입니다.
- 리턴 시 반드시 하나의 Root 엘리먼트만 존재해야 하므로, 여러 태그를 보낼 땐 <Fragment> 혹은 <></>로 감싸야 합니다.
12. Props와 State
- Props: 부모 컴포넌트가 자식에게 전달하는 읽기 전용 데이터(인자값)입니다.
- useState: 값이 변할 때 화면을 자동으로 리렌더링하기 위해 사용하는 상태 관리 훅입니다.
13. 가상 돔(Virtual DOM)과 성능
- 리액트는 실제 DOM 대신 가상 DOM을 사용하여 변경된 부분만 빠르게 업데이트합니다. 이 덕분에 빠른 리렌더링이 가능합니다.
14. 프로젝트 구조 (Vite)
- Vite 환경에서 실행 시 index.html을 가장 먼저 찾고, main.jsx를 거쳐 App 컴포넌트를 화면에 렌더링합니다.
15. useEffect와 라이프사이클
- 컴포넌트의 마운트, 언마운트, 업데이트를 관리합니다.
- 의존성 배열(Dependency List): 배열 안의 변수가 변할 때만 효과가 실행되도록 제어합니다.
- Clean-up: return 문에 함수를 작성하면 컴포넌트가 언마운트(화면에서 사라짐)될 때 실행되어 백그라운드 프로세스 등 자원을 정리합니다.
16. 리렌더링 조건 및 최적화
- 리렌더링 발생 조건: State 변경, Props 변경, 부모 컴포넌트의 리렌더링.
- 최적화 훅:
- useMemo: 연산된 값 재사용.
- useCallback: 함수 재사용.
- React.memo: 컴포넌트 자체를 메모리제이션하여 불필요한 렌더링 방지.
- useRef: 상태값은 저장하지만 변경되어도 리렌더링을 유발하지 않을 때 사용합니다.
17. 전역 상태 관리 (Context & Redux)
- Context API: useContext를 통해 props 전달 없이 최상위 상태를 하위에 공급합니다.
- Redux: 외부 라이브러리로, 상태를 슬라이스 단위로 관리하며 useSelector(조회), useDispatch(변경 요청)를 사용합니다.
| 구분 | useState | useRef |
| 용도 | 상탯값 관리 (화면 표시용) | 저장공간 / DOM 요소 접근 |
| 리렌더링 | 값이 변하면 화면이 다시 그려짐 | 값이 변해도 화면이 변하지 않음 |
| 값의 유지 | 리렌더링 시 값이 유지됨 | 리렌더링 시 값이 유지됨 |
| 접근 방식 | state 변수 직접 사용 | .current 속성을 통해 접근 |
| 속도 | 리렌더링을 거치므로 상대적으로 느림 | 즉시 반영되어 성능 최적화에 유리 |
1. useState (상태 관리)
- 특징: 변수의 값이 바뀌면 리액트에게 "나 값이 바뀌었으니까 화면을 새로 그려줘!"라고 신호를 보냅니다.
- 언제 쓸까? 화면에 즉시 보여져야 하는 데이터(입력창 내용, 게시글 목록, 카운터 숫자 등)를 다룰 때 사용합니다.
2. useRef (저장공간 및 DOM 접근)
- 특징: 내부적으로 값은 계속 바뀌고 저장되지만, 리액트에게 신호를 보내지 않습니다. 즉, 화면은 그대로입니다.
- 언제 쓸까?
- 저장공간: 렌더링과 상관없이 값을 유지해야 할 때 (예: 이전 값 저장, 타이머 ID 관리).
- DOM 접근: 특정 태그에 직접 접근하여 포커스를 주거나 크기를 계산할 때 (예: input 태그에 포커스 주기).
🗄️ Database (데이터베이스 핵심 요약)
18. 제약 조건과 인덱스
- PK(Primary Key): 중복 불가, NULL 불가, 테이블당 1개만 가능하며 자동으로 인덱스가 생성됩니다.
- Index: 검색 속도를 비약적으로 높이지만, 무분별한 사용은 전체 DB 성능(삽입/수정 시 비용 발생)을 떨어뜨릴 수 있습니다.
19. SQL 분류 및 문법
- DDL: CREATE, ALTER, DROP (구조 정의)
- DML: INSERT, UPDATE, DELETE (데이터 조작)
- TCL: COMMIT, ROLLBACK (트랜잭션 제어)
- DQL: SELECT (HAVING은 Group by와 함께, ORDER BY는 항상 마지막에 위치)
20. 조인(JOIN)과 서브쿼리
- JOIN: ON은 두 컬럼이 모두 조회되고, USING은 컬럼명이 같을 때 하나만 출력됩니다.
- 서브쿼리: ()로 묶어 메인 쿼리에 결과를 반영합니다. 결과가 2개 이상(다중행)일 경우 IN, ANY, ALL, EXISTS 연산자를 사용해야 합니다.
💡 데이터베이스 모델링 3단계 (개논물)
- 개념적 설계: 현실 세계를 추상화하여 표현 (ERD 작성).
- 논리적 설계: 목표 DBMS에 맞게 설계, 정규화를 수행하여 데이터 중복 최소화.
- 물리적 설계: 특정 DBMS의 특성을 고려하여 테이블 정의서, 인덱스, 파티션 등을 구체화.
- 참고 함수: IFNULL(컬럼, 대체값) (NULL 처리), AVG(컬럼) (평균 계산).
- 기타: AUTO_INCREMENT는 PK 컬럼 등에 유일한 값을 자동으로 할당할 때 사용합니다.
📊 DB 핵심 함수 정리
1. IFNULL(컬럼명, 대체값)
데이터베이스 내의 특정 컬럼 값이 NULL일 경우, 이를 그대로 두지 않고 사용자가 지정한 다른 값으로 변환하여 보여주는 함수입니다.
- 사용 이유: 산술 연산(덧셈, 곱셈 등) 시 NULL이 포함되면 결과가 무조건 NULL이 되는 것을 방지하기 위해 사용합니다.
- 작동 방식: 컬럼값이 NULL이 아니면 원래의 값을, NULL이면 대체값을 반환합니다.
- 예시:
-
SQL
-- 보너스(bonus)가 NULL이면 0으로 표시하여 급여 총합 계산 SELECT name, (salary + IFNULL(bonus, 0)) AS total_pay FROM employees;
2. AVG(컬럼명)
선택된 행들에 있는 특정 컬럼 값들의 평균을 계산하는 집계 함수입니다.
- 특징: 계산 과정에서 NULL 값은 자동으로 제외하고 평균을 구합니다.
- 주의사항: 만약 NULL을 0으로 간주하여 평균에 포함시키고 싶다면 위에서 배운 IFNULL을 중첩해서 사용해야 합니다.
'Dev > Computer Science' 카테고리의 다른 글
| [CS] 프로그래밍 기본 개념 시험문제 요약 (0) | 2026.04.16 |
|---|---|
| [CS] 트랜잭션 예외 처리 정리 | Checked Exception, Unchecked Exception (0) | 2025.09.11 |
| [CS] 낙관적 락, 비관적 락 - 동시성 제어 주요기법 (0) | 2025.08.20 |
| [CS] RestfulAPI 설계와 적용방법 알아보기 (2) | 2025.08.05 |
| [CS] 회선(서킷) 교환 방식 VS 패킷 교환 방식 (0) | 2025.07.27 |