백엔드
자바 기술 면접 정리 2
coyojo
2023. 5. 9. 11:16
클래스는 무엇이고 객체는 무엇인가요?⬛ 객체(Object)란?객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말한다. 예를 들어 물리적(유형)으로 존재하는 자동차, 컴퓨터, 사람과 추상적(무형)으로 존재하는 강의, 주문 등이 모두 객체가 될 수 있다.사람이라는 객체는 이름, 나이, 성별 등과 같은 속성과 먹다, 걷다, 자다 등의 동작을 가진다. Java에서는 이러한 속성들을 필드(field), 동작들을 메소드(method)라고 부른다. ⬛ 클래스(Class)란?클래스(Class)란 Java 프로그램에서 객체를 생성하기 위한 일종의 설계도이다. 객체가 가지는 속성(필드)과 동작(메소드)으로 이루어져 있다. 흔히 붕어빵(객체)을 만들기 위한 붕어빵 틀(클래스)이라고 비유를 한다. 클래스는 필드(Field), 생성자(Constructor), 메소드(Method)로 구성되어 있다. 이들은 생략될 수도 있고 하나 이상 작성될 수도 있다.필드: 객체의 데이터가 저장되는 곳이다. 생성자: 객체가 실제로 생성될 때 초기화 역할을 담당한다. 메소드: 객체의 동작에 해당하는 실행 블록이다. |
정적(static)이란 무엇인가요?StaticJava에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미합니다.이를 정확히 이해하기 위해서는 메모리 영역에 대한 이해가 필요합니다. 일반적으로 우리가 만든 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap영역에 생성됩니다. 객체의 생성시에 할당된 Heap영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받습니다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하므로 자주 사용하게 되면 시스템의 퍼포먼스에 악영향을 주게 됩니다. Static 변수 특징: 객체를 생성하지 않고도 static 자원에 접근이 가능Static 변수는 클래스 변수입니다. 객체를 생성하지 않고도 Static 자원에 접근이 가능합니다. Static 변수(정적 변수)· 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수Java에서 Static 변수는 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 변수로, 메모리에 한번 할당되므로 여러 객체가 해당 메모리를 공유하게 됩니다. |
자바의 원시타입들은 무엇이 있나요?
|
접근 제어자의 종류와 이에 대해 설명해주세요.
|
객체지향에 대해서 설명해주세요. 즉, 기능이 아닌 객체가 중심이며 "누가 어떤 일을 할 것인가?"가 핵심이다. 객체 지향 프로그래밍의 4가지 특징은 각각 추상화, 상속, 다형성, 캡슐화 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 상태와 행위를 가진 객체를 만들고 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다. 프로그램을 수많은 '객체(object)'라는 기본 단위로 나누고 이들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음으로 봐야 한다. 가장 큰 이점 중에 하나는 객체 지향적 설계를 통해서 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다는 점입니다. 소프트웨어를 설계할 때 객체 지향적 원리를 잘 적용해 둔 프로그램은 객체가 각자의 독립적인 역할을 가지기 때문에 코드의 변경을 최소화하고 유지보수를 하는 데 유리합니다 |
SOLID(객체지향 5대원칙)에 대해서 설명해주세요. 💡 객체지향의 설계원칙에 대해 설명해주세요.
|
동일성(identity)와 동등성(equality)에 대해 설명해주세요. 동일성(identity)은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다. 여기서 완전히 같다는 뜻은 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다. 동등성(equality)은 동등하다는 뜻으로 두 개의 객체가 같은 정보를 갖고 있는 경우를 의미한다. 동등성은 변수가 참조하고 있는 객체의 주소가 서로 다르더라도 내용만 같으면 두 변수는 동등하다고 이야기할 수 있다. 동일하면 동등하지만, 동등하다고 동일한 것은 아니다. 그리고 해당 변수가 동등한지 equals 연산자를 통해 판별할 수 있다. |
(equals(), ==)원시타입과 참조타입의 차이에 대해 설명해주세요. == 연산자는 원시타입(정수형 byte,short,int,long,실수형 double,float, 문자형 char, 논리형 Boolean) 에 대해서는 값을 비교한다. 참조형 변수 타입에 대해서는 주소값을 비교한다. 사실 primitive type도 Constant Pool에 있는 특정 상수를 참조하는 것이기 때문에 결국 주소값을 비교하는 것으로 볼 수 있다. 같은 상수를 참조하면 주소값이 같으니 결국 같은 값이면 동일하다고 판단할 수 있다. 가장 중요한 포인트는 ==는 주소값이 같은지 아닌지 비교하는 것이고, equals()연산도 내부적으로 주소값을 비교하지만 String클래스에서는 equals()를 재정의해 객체간의 값인 그 내용을 비교하게 되어있다. |