객체지향 프로그래밍 (OOP)
- 현대 컴퓨터 프로그래밍 패러다임의 하나
- 프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악
- 특징
- 소프트웨어의 부품화, 재사용을 주 목표로 함
- 코드의 재사용성이 높음
- 코드 관리가 쉬워짐 : 개발과 유지보수에 강점, 직관적 코드 분석이 가능
- 신뢰도 높은 프로그램 개발 가능
객체 (Object)
- 현실세계에 존재하는 명명할 수 있는 모든 것
- 정보를 효율적으로 관리하기 위해 의미를 부여하고 분류하는 논리적 단위
- 객체는 다른 객체와 서로 상호작용하며 동작
- 데이터(상태, 속성)와 관련된 동작(함수)을 모두 포함한 개념 (Data + Method)
-
클래스 (Class)
- 객체를 정의해 놓은것
- 객체를 생성하는데 사용되는 설계도
인스턴스 (Instance)
- 객체는 인스턴스의 일반적인 의미 (Class > Instance)
- 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부름
- 인스턴스 instance : 객체가 메모리에 할당되어 실제 사용될 때
- 인스턴스화 instantiate : 클래스로부터 인스턴스를 생성하는 것
객체지향의 네가지 특성
- 상속성Inheritance : 잘 만들어진 클래스 재사용 -> 코드 중복성 제거, 코드 안정성
- 캡슐화Encapsulation : 접근성 제한 -> 필드보호 -> 정보은닉
- 다형성Polymorphism : 클래스를 다양한 방식으로 접근해서 사용
- 추상화Abstraction : 내부구조와 상관없이 사용가능
이미 만든 객체와 비슷하지만 필드와 메서드가 약간 차이나는 새로운 객체 § 확장extends라고도 부름
- 기존의 클래스에서 공통된 필드와 메서드를 상속(재사용)
- 더 필요한 필드와 메서드를 추가
IS - A 관계
- ChildClass is a ParentClass
공통부분 추출 (데이터, 메소드) -> 추상화 (일반화)
Extends
- 자식Class는 부모의 필드와 메소드는 구현하지 않아도 그대로 사용가능
- 필요한 field 및 method만 추가로 구현하여 사용할 수 있음
캡슐화 (Encapsulation)
외부의 잘못된 사용으로 객체가 손상되는 것을 피하고자 사용
접근 제한자Access Modifier을 사용하여 객체의 필드와 메서드의 사용범위를 제한
- 객체의 실제 구현된 내용을 감추고 접근 방법만 노출
- 외부 객체(객체 사용 부)에서는 객체의 내부 구조를 알지 못함(알 필요도 없음)
- 객체가 노출하여 제공하는 필드와 메서드만 이용 가능
- 개발자는 숨겨야하는 필드와 메서드, 공개하는 필드와 메서드를 구분하여 작성 필요
다형성 (Polymorphism)
Java 객체 지향에서 가장 중요한 개념
하나의 매서드나 클래스를 다양한 구현으로 사용 가능하게 하는 개념
- 오버로드Overload와 오버라이드Override를 통해 다형성을구현
오버로드 (Overload)
같은 이름의 매서드를 파라미터를 다르게 하여 재사용
public static void add () { ... };
public static void add (int a, int b) { ... };
...
오버라이드 (Override)
상속된 메서드 재정의(덮어쓰기)
부모에게 상속받은 메소드를 수정하여 자식만의 기능을 구현하는 기능
public class Parent {
public void add () { ... };
}
public class Child extends Parent {
public void add () { };
}