2020/08/05 - [👩🏻💻Technical Interview/Questions] - [ JAVA 개념정리 ] Part 1 (자바란? ~ 메모리관리)
기술면접 필수 질문!(라지만, 난 받아본 적이 없지...그래도 정리!)
1. 객체지향프로그래밍에 대해 설명해주세요.
객체지향프로그래밍(Object Oriented Programming) 이란, 이름 뜻 그대로 객체를 기준으로 코드를 작성하여 구현하는 프로그래밍 입니다.
예를들어, 한 제품을 만들고자 할 때,
그 제품에 해당되는 부품들을 각각 만들고, 그 부품들을 재 조립하여 하나의 제품으로 만들듯이
객체지향프로그래밍 또한 부품에 맞는 객체들을 만들고, 객체 서로간의 의존관계를 생성하여 구현하고 실행하는 프로그래밍 기법 입니다.
1-1. 객체지향 프로그래밍의 장점
코드 재사용이 가능합니다. 남이 만든 코드를 가져다 쓸 수도 있고, 확장하여 사용할 수도 있습니다.
유지보수가 간단합니다. 절차지향 프로그래밍의 경우 오류가 난 부분을 순차적으로 찾아야 만 했었는데 객체지향 프로그래밍의 경우,오류가 난 부분이 클래스 내부에 있으므로 비교적 찾기 수월합니다.
모듈화가 가능하므로 대형 프로젝트에 적합합니다.
1-2. 객체지향 프로그래밍의 단점
초기 설계시 시간이 오래 걸린다는 단점이 있습니다. 또한 객체가 많아질수록 그만큼 메모리사용량이 늘어나므로
처리속도가 느려질 수 있습니다.
2. 객체지향 프로그래밍의 특성(4대특성)에 대해 설명해주시겠어요?
객체지향 프로그래밍에는 총 4가지의 특성이 있습니다. 순서대로 설명해드리겠습니다.
2-1. 추상화
객체들에게서 공통적인 속성과 행위 즉 필드와 메소드를 추출하는 것을 추상화라고 합니다.
예를들어, 딸기맛 아이스크림, 바닐라맛 아이스크림, 초코맛 아이스크림이 있을 때,
각각의 아이스크림들은 가격과 맛, 용량이라는 공통된 속성이 있을 것이고, 먹는다 라는 공통된
행위를 가지고 있을 것 입니다. 이렇게 공통적으로 가지고 있는 속성과 행위들을 가지고
하나의 클래스를 정의하는 것 (즉, 아이스크림이라는 클래스)을 추상화라고 합니다.
2-2. 캡슐화
객체안의 상세한 내용을 외부로부터 숨기고, 보여주고 싶은 데이터나 메소드만 노출시켜 상호작용 할 수 있도록 하는 것을 캡슐화 라고 합니다. 중요한 값에는 외부로부터 접근할 수 없도록 접근제한자로 제한할 수 있고 정보를 숨길 수 있습니다.
2-3. 상속
상속은 부모클래스에 있는 필드와 메소드를 부모클래스를 상속받은 자식클래스들에게 물려줄 수 있는 특성입니다.
또한 자식클래스는 부모로부터 상속받은, 물려받은 메소드를 재 정의할 수 있는 오버라이딩이 가능합니다.
즉, 코드를 재사용 할 수 있다는 장점이 있습니다.
2-4. 다형성
다형성은 사전적의 의미로 풀어서 얘기하면 다양한 형태로 나타낼 수 있는 능력을 뜻합니다.
객체지향 프로그래밍에서는 하나의 클래스 내부에 같은 이름의 행위(메소드)를 파라미터 타입이나 파라미터 개수를 다르게 하거나
상위 클래스의 메소드를 재정의하여 서로 다른 실행결과를 도출할 수 있도록 하는 것을 다형성 이라고 합니다.
3. 오버로딩 / 오버라이딩
오버로딩은 클래스 내에 같은 이름이지만 파라미터개수나 타입을 다르게 하여 서로다른 실행결과를 도출할 수 있도록 하는 기술입니다.
오버라이딩은 부모클래스에서 상속받은 메소드를 재 정의하여 사용하는 기술 입니다.
4. 객체 vs 클래스 vs 인스턴스
우선 객체란 물리적인 것 혹은 추상적이면서 다른 것들과 구별할 수 있는 특징을 가지고 있는 모든 것을 칭합니다.
(예를들어, 물리적인 것이라 하면 컵이나 향수나, 이어폰 이 될 수 있고, 추상적인 것이라 하면 수업, 강의가 될 수 있습니다.)
클래스는 이러한 객체들을 인스턴스화 하기 위한 설계도나 틀 이라고 볼 수 있습니다.
인스턴스는 클래스를 new연산자를 통해 heap영역에 할당된 객체를 뜻합니다.
'👩🏻💻Technical things > Questions' 카테고리의 다른 글
추상클래스 VS 인터페이스 (0) | 2020.08.11 |
---|---|
[ JAVA 개념정리 ] Part 4 ( Collection ~ END) (1) | 2020.08.05 |
[ JAVA 개념정리 ] Part 3 (인터페이스~Constructor) (0) | 2020.08.05 |
[ JAVA 개념정리 ] Part 1 (자바란? ~ 메모리관리) (1) | 2020.08.05 |
[ Data Structure ] (0) | 2020.07.22 |