객체지향 프로그래밍(OOP)
로직을 상태와 행위로 이루어진 객체로 만드는 것으로 여기서 객체란
변수와 메소드를 그룹핑한 것이다., 연관된 메소드와 그 메소드가 사용하는 변수들을 분류하고 그룹핑하는
것이다. 여기서 그룹핑 한 대상을 객체라고 한다. 중요목적은
재사용성이다.
추상화
복잡함 속에서
필요한 관점만을 추출하는 행위
캡슐화
내부의 동작
방법을 숨기고 사용자에게는 사용방법만을 노출하는 것이다.
인터페이스
어떤 객체가
있을 때 그 객체가 특정한 인터페이스를 사용한다면 그 객체는 반드시 인터페이스의 메소드를 구현해야 한다. 하나의
클래스가 여러 개의 인터페이스를 구현할 수 있으며, 인터페이스도 상속이 될 수 있다. 인터페이스의 멤버는 외부에서 제어할 수 있어야 하기 때문에 항상 public으로
구성한다. 다중상속과 같은 기능을 구현할 수 있도록 해준다. 인터페이스는
추상메소드와 변수가 아닌 상수만을 소유할 수 있다. 인터페이스에서 변수를 사용하게 되면 상수화되기 때문에
상수 선언시 값초기화를 해주어야 한다. 이러한 인터페이스에는 추상메소드가 있기 때문에 반드시 오버라이딩을
해줘야 한다.
객체
서로 연관된
변수(property)와 함수(method)를 그룹핑한 것
클래스
연관되어 있는
변수와 메소드의 집합
상속
기존의 객체를
수정하지 않으면서 새로운 객체가 기존의 객체를 기반으로 만들어지게 되는 것으로 코드가 중복되는 것을 방지할 수 있으며, 일련의 클래스를 위한 공통규약을 정의한다.
Overriding
상속받은
부모의 메소드를 그대로 사용하지 않고 자신에 맞게 변경하여 사용하는 것으로 매소드의 이름, 파라미터, 리턴 타입이 같아야 한다. 즉 상위 클래스에 있는 메소드와 완벽하게
일치해야 한다.
Overloading
이름은
같지만 시그니처를 다른 메소드를 중복으로 선언 할 수 있는 것으로 리턴유형이 달라도 되지만 리턴 유형만을 바꿀 순 없다.
추상클래스
상속을
강제화하기 위한 것. 부모 클래스는 메소드의 시그니처만 정의해놓고 그 메소드의 실제 동작 방법은 이
메소드를 상속 받은 하위 클래스의 책임으로 위임한다. 즉 선언만 되어있고 구현은 되어있지 않은 메소드를
추상 메소드라고 하는데 이를 하나라도 포함하게 되는 클래스를 추상클래스라고 한다.
인터페이스 vs 상속
상속은 상위 클래스의 기능을 하위 클래스가 물려 받는것이라고 한다면, 인터페이스는
하위 클래스에 특정한 메소드가 반드시 있도록 강제한다.
추상 vs 인터페이스
인터페이스는 클래스가 아닌 인터페이스라는 고유형태이고 추상 클래스는 일반적인 클래스이다. 또한, 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가질 수 있다. 인터페이스와
추상클래스의 가장 큰 차이점은 인터페이스는 클래스가 아니라는 것, 추상메소드로만 이루어져 있다는 것이다.
다형성
하나의 메소드나
클래스가 존재할 때 이러한 것들이 다양한 방법으로 동작하는 것을 의미한다.