-
면접을 위한 JAVA 정리CS 2025. 11. 17. 15:18
제가 다시 보려고 만든 건데, C#과 비슷한 부분이 많아서 생략된 부분이 많습니다.
1. C와의 차이점
- JVM 위에서 실행
- 가비지 컬렉터
- 절차지향 vs 객체지향
- 예외 처리와 접근 제어자가 언어 레벨에서 제공됨
2. 접근 제어자
- public : 모든 곳에서 접근 가능
- protected : 같은 패키지, 상속 관계에서 접근'
- default : 같은 패키지에서 접속 가능
- private : 클래스 내부에서 접근 가능
3. OOP 객체 지향 프로그래밍
- 추상화 : 핵심만 명시하고 구체적인 부분은 내부에서 구현함
- 캡슐화 : 변수 보호, getter, setter
- 상속 : 코드 재사용, 부모 기능 확장
- 다형성 : 오버라이딩, 오버로딩
# 오버라이딩 : 부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의
# 오버로딩 : 함수명을 리턴값에 따라 여러번 사용 가능
4. JVM과 메모리 구조
- .java -> 컴파일 -> .class ( Bytecode 생성)
- JVM에 클래스를 로딩하고 -> 검증하고 -> 실행 엔진이 이를 해석, JIT 컴파일러가 최적화
5. JVM 메모리 영역
- Method Area : 클래스 정보를 담고 있음
- Heap : 객체 저장 ( GC 포획 대상 )
- Stack : 메서드 호출, 지역 변수
- PC Register : 실행 위치
6. GC
- 참조가 끊킨 객체를 Heap 에서 자동으로 회수
7. List, Set, Map
- List : 순서 o, 중복 x
- Set : 순서 o, 중복 x
- Map : key - value 저장
List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); Set<Integer> set = new HashSet<>(); set.add(1); set.add(1); // 무시됨 Map<String, Integer> map = new HashMap<>(); map.put("철수", 20);#HashMap: 비동기, 빠름
#Hashtable: 동기화 O, 하지만 전체 락 → 느림
#ConcurrentHashMap: Segment 기반 락 → 안전 + 빠름
→ 금융권에서 다중 스레드를 안전하게 처리하기 때문에 ConcurrentHashMap을 가장 많이 사용합니다.8. Thread, Runnable
- thread 는 실행 단위, runnable은 실행할 작업을 정의
class MyThread extends Thread { public void run() { System.out.println("스레드 실행"); } } new MyThread().start();9. 동기화와 데드락
- 동기화 : 여러 스레드가 동시에 공유 자원에 접근하지 못하도록 락을 걸어 데이터 일관성 보장
- 데드락 : 서로가 서로의 락을 기다리며 무한 대기가 걸린 상태
10. 예외 처리
try { int x = 10 / 0; } catch(Exception e) { System.out.println("에러!"); } finally { System.out.println("무조건 실행"); }11. Stream -> 반복문 대체
list.stream() .filter(x -> x.startsWith("A")) .forEach(System.out::println);12. 의존성 주입 - 외부에서 instance를 만들어서 주입시키는 것임.
class PasswordEncoder { String encode(String raw) { ... } } class UserService { private PasswordEncoder encoder = new PasswordEncoder(); void register(String id, String pw) { String encoded = encoder.encode(pw); // 저장 ... } } // 문제점 // Tight coupling이라 테스트가 어렵다 // 의존성 주입 class UserService { private final PasswordEncoder encoder; public UserService(PasswordEncoder encoder) { this.encoder = encoder; // 외부에서 만든 객체를 주입 } void register(String id, String pw) { String encoded = encoder.encode(pw); } }'CS' 카테고리의 다른 글
Apache Spark (0) 2025.11.26 Apache Kafka (0) 2025.11.26 면접을 위한 C 정리 (0) 2025.11.17 면접을 위한 DB 정리 (0) 2025.11.14 Singleton 패턴 (2) 2025.08.07