Tech Collection

[Interview] Java 기초 정리 본문

Concept/Note

[Interview] Java 기초 정리

eee_269 2021. 4. 9. 01:06
728x90
반응형

OOP? 객체지향 프로그래밍

- Object Oriented Programming

- 실제 세계를 표방함, 데이터와 절차를 하나의 덩어리로 처리하는 기법

- Java, Python, C++

- 절차지향 언어보다 속도 느림

OOP의 5가지 설계 원칙

  1. 재사용성 높음

  2. 코드 변경 용이

  3. 직관적인 코드 분석

  4. 개발 속도 향상

  5. 상속을 통한 장점 극대화

OOP 특징

  1. 추상화

    : 객체가 가진 공통 속성이나 기능을 묶어 명시적인 이름을 부여

  2. 캡슐화

    : 관련된 데이터와 코드를 하나로 묶은 것으로 데이터를 감추고 외부와의 상호 작용은 메소드를 통함

  3. 상속

    : 이미 작성된 클래스를 이어받아서 새로운 클래스를 생성, 기존 코드 재활용

  4. 다형성

    : 같은 코드로 다른 행위 - Overriding, Overloading

  Overriding Overloading
특징 상속관계에서 사용
메소드 재정의
같은 클래스 내에서 사용
기존에 없는 새로운 메소드 추가
리턴형 동일 달라도 괜찮음
메소드명 동일 동일
매개변수 동일 달라야만 함

 

절차지향 프로그래밍

- 순차적인 처리를 중요시 함

- 처리속도가 빠르다

- C

 

함수형 프로그래밍

 - 순수 함수를 이용하여 프로그램을 만드는 것

 

JVM

- Java Virtual Machine

- 운영체제에 상관없이 Java가 동작할 수 있도록 도와줌

 

JDBC

- Java에서 DB로 접속할 수 있도록 하는 자바 API

 

Java Memory

 

지역변수

- 메소드 안에서만 사용 가능한 변수

- 메모리의 Stack 영역에 존재

전역변수

- 값 유지됨

- 클래스 내 어디서든 접근 가능한 변수

- 프로그램 실행 & 종료에 따라 메모리 할당 & 해제

- 메모리의 Heap 영역에 존재

static 변수

- 지역 + 전역

- 메소드 안에서만 사용 가능한 변수

- 값 유지, Heap 영역에 존재, 프로그램 실행 & 종료에 따라 메모리 할당 & 해제

 

Garbage Collector (GC)

- Carbage : 정리되지 않은 메모리

- 프로그램이 사용할 수 있는 메모리 용량이 부족할 때 garbage들을 메모리에서 해제하는 기능

 

Process

- 운영체제에서 실행 중인 하나의 프로그램

- 하나 이상의 스레드 포함

Thread

- 프로세스 내에서 동시에 실행되는 독립적인 실행 단위

장점

  1. 빠른 프로세스 생성

  2. 적은 메모리 사용

  3. 쉬운 정보 공유

단점

  : 교착상태에 빠질 수 있다.

 

String

- 메모리영역 불변성 (immutable)

- String 변수에 새로운 값이 들어가게 되면 기존 값은 garbage가 되고 새로운 메모리 영역을 가리킴

  -> 기존 값은 GC에 의해 사라짐

- 변하지 않는 문자열을 자주 읽는 경우 사용

- 추가, 수정, 삭제 등의 연산이 빈번할 때 Heap에 많은 임시 garbage 생성되어 성능에 영향미침

- 멀티 스레드 환경에서 안전하다 -> 연산이 별로 없고 멀티 스레드 환경일 때 사용

StringBuffer / StringBuilder

- 메모리영역 가변성 (mutable)

- .append() , .delete() 통해서 값 추가, 삭제

- StringBuffer : 멀티 스레드 환경에서 안전하다 -> 연산이 빈번하고 멀티스레드 환경일 때 사용

- StringBuilder : 단일 스레드에서 성능 좋음 -> 연산이 빈번하고 단일 스레드 환경일 때 사용

 

접근제한자, 제한 범위

private default protected public
같은 클래스 같은 패키지 같은 패키지 & 자식 클래스 제한 없음

 

추상클래스

- 실제 클래스의 공통적인 부분(변수, 메소드) 추출해서 선언한 클래스

- 추상클래스와 실제클래스는 부모 - 자식의 상속관계

- abstract

- 객체 생성 못함 -> body 없음

용도

  1. 필드와 메소드 이름 동일하게 -> 유지보수성 높이고 통일성 유지

  2. 시간 절약

  3. 규격에 맞는 실체 클래스 구현

 

인터페이스

- 극단적으로 동일한 목적 하에 동일한 기능을 보장하게 하기 위함

  -> 다형성을 통해 개발코드 수정 줄이고 유지보수성 높임

- 상수, 추상메소드, default 메소드(변경 가능), static 메소드 만들 수 있음

 

Singleton

- 클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공

 

Generic

- 데이터의 타입을 일반화함

- 사용할 객체를 생성할 때 <> 안에 형태를 넣어 주어 타입을 지정

- <?> : 모든 객체 자료형 (Object)

- <? super 객체형> : 객체형의 상위 객체 (Object)

- <? extends 객체형> : 객체형의 하위 객체 (명시된 객체의 자료형으로 인식)

- static 적용 안 됨

- 인스턴스 생성 안 됨

장점

  1. 타입의 안정성

  2. 코드의 간결함

 

Call By Value

- 값에 의한 호출

- 메소드 호출 시 사용되는 인자의 메모리에 저장되어 있는 값을 넘겨줌

Call By Reference

- 참조에 의한 호출

- 메소드 호출 시 값이 아닌 주소를 넘겨줌 -> 주소를 참조하여 데이터 변경

 

Final

- 여러 컨텍스트에서 단 한번만 할당될 수 있는 entity를 정의할 때 사용

final 변수

  - 이미 생성된 인스턴스에 다시 생성 불가능

final 메소드

  - Override 불가능

final 클래스

  - 상속 불가능

 

728x90
반응형

'Concept > Note' 카테고리의 다른 글

[SQL] 실행 계획  (0) 2021.05.30
[SQL] JOIN  (0) 2021.05.30
[SQL] SubQuery  (0) 2021.05.30
[SQL] Index  (0) 2021.05.30