IT/CS

개발 CS 지식 기술 면접 정리 (4) - 자바

Eri_n 2022. 5. 28. 19:57
반응형

클래스, 객체, 인스턴스 개념

 

1. 클래스 : 객체를 만들어 내기 위한 설계도, . 연관되어 있는 변수와 메서드의 집합

2. 객체 : oop 관점에서 클래스의 타입으로 선언되었을 때 객체라 부름, 모든 인스턴스를

대표하는 포괄적인 이름을 가짐, 클래스에 선언된 모양 그대로 생성된 실체.

3. 인스턴스: 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라 부름, 구체적인 실체.

 

1) 자바 특징

 

이식성이 높음 (서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행 O)

- 자바 실행 환경 (JRE:Java Runtime Environment)이 설치되어 있는 모든 OS 실행 가능

객체 지향 언어 : 캡슐화, 상속, 다형성 기능

함수적 스타일 코딩 지원 : 람다식

메모리 자동 관리

- 객체 생성 시 자동적으로 메모리 영역을 찾아서 할당하고, 사용이 완료되면

Garbage Collector를 실행시켜 자동적으로 사용하지 않는 객체를 제거시켜줌.

 

다양한 애플리케이션 개발 가능, 멀티 스레드 쉽게 구현 (관련 API 제공),

동적 로딩(객체가 필요한 시점에 클래스를 동적 로딩해서 객체 생성),

오픈소스 언어이기 때문에 오픈소스 라이브러리 풍부

 

+) JDBC : 자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스를 연결해주는

응용프로그램 인터페이스

 

2) JVM (자바 가상기계)

- 운영체제와 자바 프로그램을 중계하는 JVM을 둠(자바는 완전한 기계어 X)

- JVMOS에 종속적, 맞게 설치해야. JDKJRE 설치하면 자동으로 설치됨.

 

3) 실행과정

.java 소스파일 작성 ->컴파일러(javac.exe)로 바이트 코드 파일(.class) 생성

-> JVM 실행시 중간언어 (클래스파일)을 한줄씩 자바 인터프리터가 번역

 

* java.exeJVM 구동시 제일 먼저 main() 메소드 실행, entry point라 불림.

 

4) 메모리 사용 영역

- 메소드 영역, 힙 영역, 스택 영역으로 구분해서 사용.

 

메소드 영역

: 클래스들을 클래스 로더로 읽어 클래스별로 런타임 상수풀, 필드 데이터, 메소드 데이터,

메소드 코드, 생성자 코드 등을 분류해서 저장.

: JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

 

힙 영역

: 객체와 배열이 생성되는 영역, 스택 영역의 변수나 다른 객체의 필드에서 참조함.

: 참조하는 변수, 필드가 없으면 JVMGarbage Collector 실행, 자동으로 제거.

 

JVM 스택 영역

: 각 스레드마다 하나씩 존재, 스레드 시작 시 할당됨.

: 메소드를 호출할때마다 프레임을 추가(push), 종료되면 해당 프레임 제거(pop)

: 프레임 내부에는 로컬 변수 스택이 있음.

 

* NullPointerException : null값을 가지고 있는 참조 타입 변수 사용 시 발생 에러

* 문자열을 string 변수에 저장한다 (X)

-> 문자열은 string 객체로 생성되고, 변수string 객체를 참조한다.

-> 힙 영역 -> 스택 영역

* new : 힙 영역에 새로운 객체를 만들 때 사용, 객체 생성 연산자

- 따라서, new 연산자로 string 객체 생성후 == 연산 결과 false,

- == 연산자는 변수에 저장된 객체 번지가 동일한지를 검사하기 때문.

- 단순 문자열만 비교시 equals() 사용시 같음.

 

5) 기타

 

- object class-> 모든 클래스가 공통으로 포함하고 있어야 하는 기능을 제공하기 위해서

- 싱글톤 >전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우,

이 객체를 싱글톤이라 함.

- final 필드 > 한 번 초기화되면 수정할 수 없는 필드

- 패키저 > 클래스를 체계적으로 관리하기 위해

 

 

GetterSetter

- 일반적으로 OOP에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막음.

=> 무결성이 깨질 수 있기 때문. So 메소드를 통해 데이터를 변경함.

* getter: 필드값을 가공한 후 외부로 전달하는 역할

* setter: 매개값을 검증해서 유효한 값만 데이터로 저장하는 역할

 

Annotation

- 메타데이터: 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보

- 세 가지 용도로 사용

. 컴파일러에게 코드 문법 에러를 체크하도록 정보 제공

. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보 제공

. 실행시 특정 기능을 실행하도록 정보 제공.

 

ex)

. @Override : 재정의 된 것을 컴파일러에게 알려주어 컴파일러가 오버라이드 검사를 하도록 해줌.

. 자동으로 XML 설정파일 생성, 배포를 위해 JAR 압축 파일 생성에도 사용됨.

 

6) Collection

 

- collection 객체는 여러 원소들을 담을 수 있는 자료구조

- list(순서 O 목록), set(순서 중요 x), queue, map(key-value 형태 저장)

=> 동적 메모리 할당. (배열과의 차이점)

 
반응형