티스토리 뷰
1. OOP란? (객체지향 프로그래밍)
OOP란 Object-Oriented Programming의 약어로써 객체지향 프로그래밍을 의미
"데이터"가 아닌 데이터와 행위로 구성된 "객체"가 중심인 프로그래밍 패러다임입니다.
OOP의 특징
a. 객체지향 프로그래밍은 코드의 재사용성이 높다.
b. 코드의 변경이 용이
c. 직관적인 코드 분석
d. 개발 속도 향상
e. 상속을 통한 장점 극대화
2. OOP의 3대 조건
A. 캡슐화
객체의 속성(필드값)과 동작(메소드)를 하나로 묶는 것입니다.
데이터의 일부를 감추어 외부와의 상호작용은 메소드를 통하여 할 수 있게 한다.
데이터를 모듈화 한다는 의미가 있는데, 캡슐화를 잘하려면 객체에 책임을 적절히 분배해야합니다.
데이터를 객체 안에 포함시키고, 그 데이터에 대한 직접적인 접근을 허용하지 않고 필요에 따라 인터페이스와 같은 접근점을 제공 하여 접근점을 통해 데이터에 접근하는 것입니다.
인터페이스를 사용하여 클라이언트 측 코드에서는 구체적인 클래스는 알지 못해도 그 기능을 사용하여, 인터페이스를 통해 구체 클래스를 은닉할 수 있습니다.
a. 장점 - 객체의 세부 내용이 외부에 은폐되어, 변경이 발생할 때 오류발생이 적으며 재사용이 용이합니다.
B. 상속성
클래스 상속과 인터페이스 상속 두 가지가 있습니다.
기존의 클래스를 상속받아 재사용할 수도 있고, 수정하거나 확장할 수도 있습니다.
클래스간의 종속관계를 형성함으로써 객체를 조직화할 수 있습니다.
C. 다형성
어떠 한 요소에 여러 동작 방식을 넣어 오버라이딩이나 오버로딩하는 것을 의미합니다.
다형성은 캡슐화와 상속성을 이용하여 런타임 시에 무엇을 어떻게 실행시킬지 정하는 것과 관련이 있습니다.
3. Interface와 Abstract Class
A. Interface
추상메소드로만 구성된 클래스입니다.
인터페이스는 자바에서 다중상속의 기능을 구현할 수 있게 하고, 설계 의도를 분명하게하고 행위의 틀과 속성을 제한하여 유연성과 사용성을 극대화 할 수 있습니다.
B. Abstract Class
추상메소드가 1개 이상 존재하는 클래스입니다.
큰 틀의 실행 순서가 있지만 세부적인 동적방식을 바로 결정하기 힘들때 추상 클래스를 사용합니다.
동적바인딩
컴파일 시 결정되지 않고 런타임 시 결정된다는 개념입니다.
자바에서 기본적으로 동적 바인딩을 사용하지만 모두 그런 것은 아닙니다.
인스턴스 변수와 스태틱 메소드는 동적바인딩이 되지 않습니다.
4. Virtual Keyword(가상 함수 / 순수 가상 함수 / 가상 함수 포인터) - C 언어 관련
가상 테이블(Virtual table)을 작성하기 위해 Virtual keyword는 함수에 붙일 수 있다. 이를 통해서 오버라이딩이 가능해진다.
5. Overloading vs Overriding
Overloading(오버로딩)
- 같은 이름의 메소드를 여러개 정의하는 것입니다.
- 매개변수 타입이 다르거나 개수가 달라야 합니다.
* return type과 접근 제어자는 영향을 주지 않음
Overriding(오버라이딩)
- 상속에서 나온 개념
- 상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의
6. compareTo() 메소드
public int compareTo(String anotherString)
- 2개의 두 문자열을 비교하고 int형 값을 반환하는 메소드
7. equals() 메소드
equals 메소드는 Object 클래스에 정의되어 있고 다른 클래스에서 상속받아 오버라이딩되어 있습니다.
일반적으로 주소값을 비교하게 되지만, String 클래스에서는 실제 값을 비교합니다.
8. == 연산자 vs equals() vs hashcode()
동일성과 동등성에 대해서 알아야 합니다.
- 동일성(identity)이란 두 개의 오브젝트가 완전히 같은 오브젝트인 것입니다.
- 동등성(equality)이란 두 개의 오브젝트가 동일한 정보를 담고있는지에 대한 것입니다.
동일성은 == 연산자로 확인, == 연산자는 primitive(원시) 자료형의 비교에서 사용합니다.
동등성은 equals() 메소드로 확인합니다.
자바에서 객체는 주소값을 가지는 reference 타입이기 때문에 == 연산자로 비교할 경우 주소값을 비교합니다.
그래서 내용이 같은 객체인지 비교하기 위해서는 equals() 메소드를 사용합니다.
- hashcode()는 기본적으로 reference 주소를 반환하여 객체를 구별해주는 고유한 정수값입니다.
'면접준비' 카테고리의 다른 글
Back-end 면접 준비(3/3) (0) | 2017.11.26 |
---|---|
Back-end 면접 준비 (2/3) (0) | 2017.11.26 |
Interger.MIN_VALUES (0) | 2017.11.21 |
원시 타입 관련 (0) | 2017.11.21 |