Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

JAVA 공부 3일차 - 자바 핵심 개념 정리1 본문

공부/JAVA

JAVA 공부 3일차 - 자바 핵심 개념 정리1

Hannah0226 2023. 3. 10. 01:32

Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지하나요?

boolean: 1byte
char: 2byte
byte: 1byte
short: 2byte
int: 4byte
long: 8byte
float: 4byte
double: 8byte
 

오버라이딩(OverRiding)과 오버로딩(OverLoading)에 대해 설명해주세요.

오버라이딩: 부모 클래스로부터 상솟받은 메소드를 자식 클래스에서 재정의 하는 것.
오버로딩: 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있는 것.

 

객체지향 프로그래밍(OOP)에 대해 설명해주세요

객체지향 프로그래밍이란 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

객체지향 프로그래밍의 특징: 추상화, 캡슐화, 상속, 다형성
-추상화: 객체에서 공통된 속성과 행위를 추출하는 것. 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 할 수 있다.
-캡슐화: 데이터와 데이터를 다루는 방법들을 결합시켜 묶는 것. 재활용이 원활하고 정보은닉을 활용할 수 있다.
-상속: 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것. 재사용으로 코드가 줄어든다.
-다형성: 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석될 수 있는 것. ex)오버라이딩, 오버로딩

 

추상 클래스와 인터페이스에 대해 설명해주시고, 차이에 대해 설명해주세요.

추상 클래스: 추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스.(미완성 설계도), 상속 키워드로 expends 사용.
인터페이스: 오직 추상 메서드와 상수만을 가지고 있는 인터페이스.(기본 설계도), 상속 키워드로 implements 사용.
차이: 추상 클래스는 기능 확장으로 자신의 기능들을 하위로 확장시키는 것. 인터페이스는 실행하는 구현으로 키워드처럼 인터페이스에 정의된 메서드를 각 클래스의 목적에 맞게 동일한 기능으로 구현하는 것.

 

가비지 컬렉션(gc)란 무엇일까요?

가비지 컬렉션이란 자바의 메모리 관리 방법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요 없게된 메모리 영역을 주기적으로 삭제하는 프로세스 이다.

 

JVM의 동작 방식에 대해 설명해 주세요.

JVM이란? 자바 가상 머신의 약자로, 자바 프로그램을 컴파일 해서 나온 결과인 바이트코드를 실행시켜주는 역할을 한다.

동작 방식
-> 자바를 통해 개발을 하고 실행하게 되면 자바 파일은 바이트코드(.class)파일로 컴파일 함.
-> 바이트 코드로 변환된 파일을은 클래스 로더를 통한 동적 로딩을 통해 플요한 클래스를 로딩 및 링크하여 각 타임데이터 영역에 할당함.
-> 클래스로더로부터 할당된 바이트코드는 익스큐션 엔진을 통해 명령어 단위로 하나씩 가져와 실행함.

 

불변 객체란 무엇이고, final은 무엇일까요? 사용하는 이유와 함께 설명해주세요.

불변객체란? 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 대표적인 예시로 String이 있다.

final이란? final 키워드가 붙은 변수는 초기화 후 변경할 수 없다.

final을 사용해야하는 이유
- 병렬 프로그래밍에 유용하며 동기화를 고려하지 않아도 된다.
- 실패 원자적인 메소드를 만들 수 있다.
- Cache, Map, Set등의 요소로 활용하기에 적합하다.
- 부수 효과를 피해 오류가능성을 최소화할 수 있다.(부수 효과란? 변수의 값이나 상태 등의 변화가 발생하는 효과)
- 다른사람이 작성한 함수를 예측가능하며 안전하게 사용할 수 있다.
- 가비지 컬렉션의 성능을 높일 수 있다.

 

자바의 메모리 영역에 대해 설명해주세요.

- Method 영역: method영역은 전역변수나 static으로 선언되는 것들을 메모리에 상주시킨다.
- 힙 영역: 힙영역은 인스턴스를 생성할 때 생성되는 메모리 형식이다. new를 사용해 객체를 만들 때 저장된다.
- 스택 영역: int, long, boolean등 기본 자료형을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역이다.
 

new String()과 리터럴(" ")의 차이에 대해 설명해주세요.

new 연산자를 통해 문자열 객체를 생성하는 경우 메모리의 Heap 영역에 할당되고, 리터럴을 이용한 경우에는 String Constant Pool이라는 영역에 할당된다.
 

람다(lambda)에 대해 알아볼까요?

람다란? 익명 함수를 지칭하는 용어이다.(함수를 보다 간단하게 표현하는 방법)
특징: 이름을 가질 필요가 없다.
장점: 코드가 간단해진다. 자연연산을 수행함으로써 불필요한 연산을 최소화 할 수 있다. 멀티쓰레디를 활용하여 병렬처리를 사용할 수 있다.
단점: 람다식 호출이 까다롭다. 불필요하게 사용하며 오히려 가독성을 떨어뜨릴 수 있다.

 

스트림(stream)에 대해 알아볼까요?

스트림이란? 람다를 사용할 수 있는 기술 중 하나.(병렬처리를 쉽게 구현할수 있다)

사용방법
-생성하기: 스트림 인스턴스 생성
-가공하기: 필터링, 맵핑 등 원하는 결과 만들기
-결과만들기: 가공한 스트림을 가지고 사용할 결과값 만들기

 


리뷰

위 질문들의 답을 찾으며 내가 자바에 대해 아직 너무 모른다는 생각이 들었다. 정말 단 하나도 쉬운 질문이 없었기에 앞으로 계속해서 공부하며 자바 지식을 채워나가야겠다. 언젠가는 위 내용들이 쉽게 이해되는 날이 오겠지..?