Java Basic (면접 대비 기초 공부)
현재 나는 비전공자 입장에서 개발자로서의 직업 변환을 시도 중이고 그 중에서도 백엔드 개발자 포지션을 지원중에 있다. 면접을 준비하면서 JAVA에 대한 기본적인 공부를 다시 하고자 해당 포스팅을 남겨본다.
Java
주로 웹 어플리케이션에 사용되는 객체 지향적 언어로 JVM(자바 가상 머신) 위에 작동하여 운영체제나 하드웨어에 의존하지 않고 작동이 가능하다.
객체지향(OOP : Object Oriented Programming)
객체(대상)을 정하여 개발하고 이를 조립 및 연결하여 완성시키는 프로그래밍 기법으로 코드의 재사용성을 높이고 유지보수가 쉽다는 장점이 있다.
JVM(Java Virtual Machine)
Java가 운영체제(OS)에 종속적이지 않을 수 있는 가상 컴퓨터로 개발자의 코드가 담긴 .java 파일은 Java Compiler를 통해 .class 파일로 컴파일 되고 JVM이 OS환경에 맞춰서 bytecode를 전달하게 된다.
클래스(Class)
객체의 설계 도면으로 메서드나 필드 등 설정이 가능하며 생성자 new를 통해 초기화가 가능하다.
상속(extends/implements)
상위 클래스의 메서드나 필드 값을 하위 클래스에서 사용할 수 있는 것을 말한다.
- extends : 일반 클래스나 추상 클래스(abstract)를 상속 받을 때 사용
- implements : 인터페이스(interface)를 상속 받을 때 사용
생성자
class를 객체로 초기화 하는 클래스와 이름이 동일한 메서드로 설정하지 않으면 디폴트로 매개변수가 없는 일반 생성자 new 클래스이름();이 자동으로 설정된다.
오버로딩(Overloading)/오버라이딩(Overriding)
- 오버로딩 : 생성자에 매개변수 유형과 개수를 다르게 많이 정의하여 매개변수를 토대로 초기화 하는 방법
- 오버라이딩 : 상위클래스의 메서드 또는 필드 값을 하위 클래스가 이용하는 것으로 재정의하여 사용도 가능하다.
추상 클래스(abstract)/인터페이스(interface)
- 추상 클래스(abstract) : 클래스로서 필드나 메소드의 정의가 가능하지만 일반 클래스처럼 객체 자체로 사용이 불가능하며 상속 받아야 사용하는 객체
- 인터페이스(interface) : 클래스가 아니며 필드나 메소드를 정의할 수 없으며 상수나 메소드의 이름만 지정하여 상속 받은 객체가 오버라이딩 하여 사용해야 함
익명 클래스
상속 시 형식은 같으나 내용을 다르게 사용하는 방법으로 일회성이다.
List/set/map
- List : array의 불편함을 개선한 배열로 값의 중복이 허용되며 실제 인덱스에는 포인터(데이터의 주소)를 가르킴
- set : list와는 다르게 값의 중복을 허용하지 않으며 인덱스가 없어 값의 저장 순서를 보장하지 않음
- map : key, value 형태로 값을 저장하며 키의 중복을 허용하지 않음
MVC(model-view-controller) 패턴
웹 어플리케이션에 많이 사용되는 아키텍쳐 패턴으로 각각의 컴포넌트가 정해진 역할을 수행하여 사용자에게 결과를 제공
- model : 실질적인 데이터를 담당하는 컴포넌트로 비즈니스 로직을 통해 가공된 데이터를 컨트롤러와 뷰에게 전달함
- view : 사용자에게 실질적인 인터페이스를 제공하는 컴포넌트로 모델에게 받은 데이터를 통해 화면에 표시
- controller : 모델과 뷰 사이를 이어주는 역할을 하는 컴포넌트로 사용자의 조작에 따른 이벤트를 처리
쓰레드(thread)/데몬(Daemon) 쓰레드
- 쓰레드 : 한 프로세스의 작업 단위로 실제 역할을 수행하는 주체
- 데몬 쓰레드 : main 쓰레드 뒤에 동작하는 보조 쓰레드로 실질적으로 메모리 관리를 해주는 Garbage Collector도 데몬 쓰레드이며 main 종료 시 같이 종료
캡슐화와 은닉화
관련된 데이터 필드나 메서드를 클래스로 묶고(캡슐화) 이를 private로 설정하여 접근을 막아 필요시 Getter나 Setter 등 을 활용하여 접근하는 방식
마무리
이번 포스팅은 java 면접 대비 기본 지식을 정리해 보았다 이 외에도 추가적인 학습을 권장하며 예제 코드를 찾아보기를 바란다
개인적인 이해를 바탕으로 작성한 글 입니다. 피드백 언제든 환영합니다!