[개발자면접] 객체지향이란? 객체지향 특징, 오버라이딩 오버로딩 차이점
1. 객체지향이란?
객체지향 프로그래밍(Object-Oriendted-Programming)은 프로그램을 구성하는 구성요소들을 객체라는 곳에 담아두어 상호작용을 통해서 프로그램이 동작할 수 있게 하는 것을 말한다.
절차적으로 이루어지는 절차 지향적 언어와는 달리, 구성요소들이 객체 안에 담겨있어 특정 객체만 동작하게 하거나 데이터를 처리하기 등 다양한 일을 할 수 있다. 객체지향 프로그래밍은 크게 캡슐화, 상속, 추상화, 다형성으로 나눌 수 있다.
2. 객체지향 특징? (다형성 상속 추상화 캡슐화)
1. 다형성
다형성이란 하나의 타입에 여러 객체를 대입할 수 있는 성질. 확장성 증가. (하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 (부모타입 참조변수로 자식 타입 인스턴스 참조 가능, 반대는 불가)
2. 상속
이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것. 객체와 클래스의 재사용을 증가시키는 개념이다.
3. 추상화
인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것
객체들의 공통 속성과 행위를 추출. 그래서 명세랑 구현을 분리해두는 것. (어떤 영역에서 필요로하는 속성이나 행동을 추출하는 작업)
4. 캡슐화
실제로 구현 부분을 외부에 드러나지 않도록, 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근할 수 있게 하는 것. (public, private, protected 접근제어지시자)
- 객체가 내부적으로 기능을 어떻게 구현했는지 감추는 것.
- 변경 가능성이 높은 부분은 내부에 숨기고 외부에는 상대적으로 안정적인 부분만 공개함으로써 변경의 여파를 줄인다. (변경될 가능성이 높은 부분을 구현이라고 하고 상대적으로 안정적인 부분을 인터페이스라고 한다.)
3. 오버라이딩, 오버로딩 정의와 차이점
#오버라이딩 은 상속받은 메소드를 자식 클래스에서 재정의 하는 것.(메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다. 우리가 아는 println이 이에 해당한다. println 함수는 매개변수만 다른 여러 개의 메소드가 정의되어 있다. 매개변수로 배열을 넣을 때, 문자열을 넣을 때, 그리고 객체를 넣을 때 모두 println이라는 메소드 시그니처를 호출하여 원하는 내용을 출력하는 기능을 수행한다.
#오버로딩 은 한 클래스 내에 메소드의 이름이 동일해도 매개변수나 타입이 다르면 여러개를 정의할 수 있다.
오버라이딩은 상속 관계에서, 오버 로딩은 같은 클래스 내에서 적용된다는 차이점이 있다.