ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 면접을 위한 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
Designed by Tistory.