본문 바로가기
Dev/Computer Science

[CS] JAVA React DB 면접질문 답 리스트

by 컴포넌트설계자 2026. 4. 16.

☕ 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단계 (개논물)

  1. 개념적 설계: 현실 세계를 추상화하여 표현 (ERD 작성).
  2. 논리적 설계: 목표 DBMS에 맞게 설계, 정규화를 수행하여 데이터 중복 최소화.
  3. 물리적 설계: 특정 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을 중첩해서 사용해야 합니다.