• 1. Java 언어를 사용하는 이유 / 장점 / 단점
    • 이유와 장점
    • - 자바는 한번의 개발로 여러 플랫폼에서 실행할 수 있다는 플랫폼 독립성을 가지고(WORA = Write One, Run
    •    Anywhere), JVM위에서 실행되기 때문에 운영 체제에 상관없이 동일한 코드가 동작한다.
    • - 자바는 객체 지향 프로그래밍의 장점을 제공함으로써 코드의 재사용성, 유지보수성, 확장성을 향상시킨다.
    • - JIT(Just-In-TIme) 컴파일러를 통해 런타임 성능이 향상되었다. 
    • - 다중 스레드 지원, 자동 메모리 관리 등의 기능이 대규모 시스템 개발에 적합한 환경을 제공한다.
    • - 표준 라이브러리와 오픈 소스 라이브러리가 풍부하다.
    • - 가상 머신을 통해 실행되기 때문에 악성 코드의 실행을 제한하도 다양한 보안 기능을 적용할 수 있다.
    •  
    • 단점
    • - 가비지 컬렉션 메커니즘과 가상 머신의 오버헤드 때문에 자바 프로그램은 메모리 사용량이 크다.
    • - 무거운 IDE(통합 개발 환경)을 사용해야 하기 때문에 초기 설정이나 메모리 사용양 측면에서 불편할 수 있다. 
  • 2. 객체지향 언어의 장점 / 단점
    • 장점
    • - 모듈화 : 모드를 객체로 나누어 모듈화할 수 있다. → 코드의 재사용성 증가, 유지보수 용이
    • - 상속 : 부모 클래스의 속성과 메서드를 자식 클래스가 상속받는 기능 → 코드 중복 방지, 코드 일관성 유지
    • - 다형성 : 하나의 인터페이스나 추상 클래스를 통해 여러 객체를 다룰 수 있는 기능 → 코드 유연성, 확장성
    • - 캡슐화 : 객체의 상태와 행위를 하나로 묶어 외부로부터 은닉하는 기능 → 코드의 안정성과 보안
    • - 재사용성 : 코드를 재사용하기 쉽도록 설계함 
    •  
    • 단점
    • - 적절한 객체와 클래스의 설계가 복잡할 수 있다.
    • - 각 객체의 상태를 저장하기 위한 메모리가 필요하기 때문에 프로그램의 메모리 사용량을 늘릴 수 있다.
    • - 상속을 오용하면 클래스 간의 결합도가 높아지고 유연성이 감소할 수 있다.
  • 3. 절자 지향 프로그래밍과 객체 지향 프로그래밍의 차이
    • 절차 지향 프로그래밍
    • - 프로그램을 순차적인 절차로 나누어 설계한다.
    • - 데이터와 관련된 함수들이 따로 존재하며 이러한 함수들이 데이터를 처리하며 데이터에 대한 직접적인 접근이 
    •   가능하다.
    • - 함수의 구조가 간단하여 작은 규모의 프로그램에서는 유지보수가 용이할 수 있지만, 큰 규모릐 프로그램에서는
    •   유지보수가 어려울 수 있다.
    •  
    • 객체 지향 프로그래밍
    • - 프로그램들을 객체들의 집합으로 구성하고 객체 간의 상호 작용을 통해 프로그램이 동작한다.
    • - 데이터와 해당 데이터를 조작하는 메서드가 하나의 단위인 객체로 묶여 있다.
    •  
    • ★ 절차 지향 프로그래밍은 프로그램을 명령어의 집합으로 구성하고, 데이터와 함수를 분리하여 작성하는데 초점
    •     을 맞춘다. 객체 지향 프로그래밍은 프로그램을 상호 작용하는 객체들의 집합으로 구성하며 데이터와 해당 데
    •     이터를 조작하는 함수를 객체로 묶어 설계한다.
  • 4. JVM 기초 (클래스 로더, 런타임 데이터 영역, 실행 엔진 등) -> 특히 런타임 데이터 영역 자세히
    • JVM이란?
    • 자바 프로그램이 실행되는 가상 머신. 자바 바이트 코드를 해석하고 실행하여 호스트 플랫폼(운영 체제 및 하드웨어)에 독립적으로 자바 프로그램을 실행할 수 있도록 한다.
    •  
    • - 바이트 코드 해석기 : 자바 컴파일러에 의해 변환된 바이트 코드를 해석하고 실행 
    • - 가비지 컬렉터 : 자동 메모리 관리를 위해 더 이상 사용되지 않는 객체를 자동으로 탐지하고 해제하여 메모리 누
    •   수를 방지한다.
    • - 메모리 관리 : 힙 영역과 스택 영역으로 구분된 메모리 공간을 관리한다. 힙은 객체와 배열이 저장되는 영역이고,
    •   스택은 메서드 호출과 관련된 지역 변수 및 실행 정보를 저장한다.
    • - 클래스 로더 : 동적으로 필요한 클래스 파일을 로드하고 연결한다. 
    • - 런타임 데이터 영역 : JVM이 자바 프로그램을 실행하는 동안 데이터를 저장하고 관리하는 메모리 영역
      • 1) 메서드 영역 : 클래스 및 메서드의 바이트 코드, 정적 변수, 메서드 정보 등을 저장한다. JVM이 시작될 때
      •     생성되며, 모든 스레드가 공유하는 공간이다.
      • 2) 힙 영역 : JVM이 시작될 때 미리 할당되며, 가비지 컬렉터에 의해 관리된다. 
      • 3) 스택 영역 : 각 스레드마다 개별적으로 할당된다. 스택 프레임은 각 메서드 호출 시마다 스택 영역에 생성
      •     되며, 메서드 실행이 완료되면 해당 프레임이 제거된다.
      • 4) PC 레지스터 : 현재 실행중인 스레드의 명령어 주소를 저장한다.
      • 5) 네이티브 메서드 스택 : 자바 코드가 네이티브 코드를 호출할 때 사용된다.
      •  
      • ※ JVM내에서 메서드 영역과 힙 영역은 하나, 스택 영역/PC 레지스터/네이티브 메서드 스택은 스레드의 개수만큼 생성된다. 
      •  
    • - 실행 엔진 : 바이트 코드를 기계어로 변환하고 실행하는 과정을 담당한다. 
    •  
  • 5. java의 .class 파일은 언제 기계어가 되는가?
    • - JVM의 인터프리터나 JIT 컴파일러에 의해 변환될 때 
  • 6. .class 파일 vs war 파일
    • - class 파일은 자바 프로그램의 클래스와 인터페이스를 나타내고 war 파일은 웹 애플리케이션의 자원과 파일들을 포함하여 배포할 수 있는 형식이다. class 파일은 자바 컴파일러에 의해 만들어지고 war 파일은 빌드로 만들어진다.
  • 7. 컴파일과 빌드의 차이
    • - 컴파일 : 소스 코드를 바이트 코드나 기계어로 변환하는 과정
    • - 빌드 : 소프트웨어 프로젝트를 실행 가능한 형태로 만드는 과정
  • 8. 멀티 스레딩 환경에서 static 변수를 여러 곳에서 고치려고 할 때 단점
    • - 경쟁 상태 : 두 개 이상의 스레드가 동시에 공유된 자원에 접근하려고 할 때 예상치 못한 결과가 발생한다. 
    • - 일관성 유지의 어려움 : 변수의 일관성을 유지하기 어렵다. 
    • - 데이터 손실 가능성 
    • - 성능 저하 : 동기화 메커니즘을 사용하여 여러 스레드 간의 경쟁 상태를 방지하려고 하면 성능 저하가 발생할 수
    •   있다.
  • 9. 싱글 스레딩 환경에서 static 변수를 여러 곳에서 고치려고 할 때 단점
    • - 단일 스레드 환경에서는 여러 스레드가 존재하지 않기 때문에 경쟁 상태가 일어나지 않는다. 변수를 여러 곳에
    •   서 고치더라도 다른 스레드가 변수에 접근하는 일은 없다.
  • 10. equals() vs hashCode() (특히 해시 코드가 무엇인지 학습)
    • - 두 메서드는 모두 객체의 동등성을 확인하는 메서드이다. (참고 : == 은 두 객체의 동일성 확인)
    • - equals() : 객체의 내부 상태를 비교하여 두 객체가 동등한지를 비교한다.
    • - hashCode() :  객체의 해시코드값을 반환한다. 해시코드란 데이터에 고정된 길이의 정수값을 주는 것이고 데이터를 빠르게 검색하고 비교하는 데 사용한다.
    • - 두 메서드를 함께 오버라이딩 해야 하는 이유는 equals()로 두 객체가 같다고 판단되면 두 객체는 같은 해시코드
    •   를 반환하는데 해시 기반의 자료 구조는 해시코드를 이용해 객체를 검색하기 때문에   equals()와 hashCode()가
    •   일관되지 않으면 같은 두 객체가 다른 객체로 인식될 수 있기 때문이다.
  • 11. 객체와 클래스, 인스턴스의 차이
    • - 클래스 : 객체를 생성하기 위한 , 객체의 특성(속성)과 메서드를 정의하는데 사용된다.
    • - 객체 : 클래스의 인스턴스, 클래스를 기반으로 실제로 메모리에 할당된 데이터를 가지고 있다.
    • - 인스턴스 : 클래스를 사용하여 생성된 특정한 객체
  • 12. 객체 지향 프로그래밍이란? (역할, 책임, 상태, 행동, 협력 키워드 이해하기)
    • - 역할 : 객체가 수행할 수 있는 특정한 기능이나 역할
    • - 책임 : 객체가 역할을 수행하기 위해 가져야 하는 의무나 기능
    • - 상태 : 객체가 가지고 있는 데이터의 상태
    • - 행동 : 객체가 수행할 수 있는 작업이나 동작
    • - 협력 : 객체 간의 상호 작용
  • 13. GC란 무엇이고, 어느 메모리 영역이 대상인가?
    • - 가비지 컬렉터란 프로그램에서 더 이상 사용되지 않는 객체를 자동으로 탐지하여 데이터를 해제하는 역할을 한다. 메모리 영역이 그 대상이고 객체가 더 이상 참조되지 않을 때 해제하여 메모리를 확보한다.  
  • 14. GC의 대상이 되는 변수는? (class, instance, argument, local 변수 중에)
    • - 클래스 변수 : 클래스 변수는 프로그램이 종료될 때까지 메모리에 유지되기 때문에 대상이 되지 않는다.(해당 클
    •   래스의 모든 인스턴스들이 공유하는 변수이기 때문에)
    • - 인스턴스 변수 : 클래스 내에 선언된 변수로, 객체가 생성될 때마다 각각의 인스턴스에 대해 별도의 메모리 공간
    •   이 할당된다. 객체가 더 이상 참조되지 않을 때 가비지 컬렉터의 대상이 된다.
    • - 매개 변수 : 메서드의 수행 도중에만 사용되는 값으로 메서드의 실행이 완료되면 메모리에서 해제된다.
    • - 지역 변수 : 메서드 내에 선언된 변수로, 메서드가 호출될 때 스택 프레임 내에 할당 되었다가 메서드가 실행을
    •   완료하고 스택 프레임이 제거되기 때문에 메모리에서 해제된다.
  • 15. 디스크와 메모리의 차이
    • - 디스크 : 느리고 저렴하지만 대용량 데이터를 영구적으로 보관할 수 있다. 데이터의 영구적인 저장과 검색에 사
    •   용된다.
    • - 메모리 : 빠르고 비싸며 휘발성이 있다. 프로그램 및 애플리케이션의 실행에 사용된다.
  • 16. String literal vs new String("")
    • - String literal : String Constant Pool에 같은 문자열이 있는지 확인하고 있으면 그 객체를 재사용한다. 
    • - new String("") : 문자열을 재사용하지 않고 새로운 문자열 객체를 생성한다.
  • 17. String Constant Pool이란?
    • - 문자열 상수 풀은 문자열 리터럴이 저장되는 공간. 문자열 리터럴을 생성하면 이곳에 저장된다. 
    • - 중복 문자열 제거 : 동일한 문자열 리터럴을 하나의 인스턴스로만 저장하고 재사용한다.
    • - 힙 영역과 다른 메모리에 저장된다.
    • - 가비지 컬렉터의 영향을 받지 않음 : 프로그램이 실행되는 동안 계속해서 유지된다.
    • - 해당 클래스가 로딩될 때 생성됙 프로그램이 실행되는 동안 유지된다.
  • 18. 동시성 이슈
    • - 여러 스레드가 동시에 공유된 자원에 접근할 때 생길 수 있는 문제

 

※ 용어사전 

  • 인터프리터 : 프로그래밍 언어의 소스 코드를 한 줄씩 읽고 해석하여 실행하는 프로그램(  컴파일러)
  • 자바 컴파일러 : 개발자에 의해 작성된 자바 코드를 JVM이 이해할 수 있는 바이트 코드로 변환하는 컴파일
  • JIT(Just-In-TIme) 컴파일러 : 인터프리터와 컴파일러의 중간 형태로, 프로그램을 실행하는 도중에 필요한 부분을 실시간으로 기계 코드로 컴파일하는 컴파일러
  • 가상 머신의 오버헤드 : 가상 머신 환경에서 추가적으로 발생하는 성능 손실
  • 객체 지향 프로그래밍 : 현실 세계의 개체를 모델링하고 그들 간의 상호 작용을 표현하는 프로그래밍 패러다임
  • 네이티브 코드 : 해당 플랫폼의 CPU가 이해하고 실행할 수 있는 기계어로 작성된 코드
  • 동일성 : 객체가 메모리 상에서 같은 인스턴스를 가리키는지를 비교하는 메서드
  • 동등성 : 객체가 가지고 있는 내용이 같은지를 비교

'공부 > f-lab' 카테고리의 다른 글

f-lab 6주차  (0) 2024.04.24
f-lab 5주차  (0) 2024.04.16
f-lab 4주차  (0) 2024.04.09
f-lab 3주차  (0) 2024.04.02
f-lab 2주차  (0) 2024.03.26

+ Recent posts