OOP: 객체 지향 프로그래밍
Java는 객체 지향 프로그래밍(Object Oriented Programming)을 하는 언어이다.
객체 모델링을 통해서 객체끼리 상호작용을 하도록 한다.
객체 지향 프로그램의 특징은 4가지이다.
1. 상속 Inheritance
- 부모(상위) 객체를 상속받아서 자식(하위) 객체를 만들 수 있다. 부모 객체가 가지고 있는 필드와 메소드를 자식 객체에서도 사용하거나 수정할 수 있다.
- Why?
- 중복 코딩을 할 필요가 없다.
- 유지 보수 시간을 최소화할 수 있다.
- How?
- class 자식객체 extend 부모객체 { }
2. 은닉 Encapsulation
- 은닉(캡슐화, Encapsulation)이란, 객체의 데이터(필드), 동작(메소드)를 하나의 객체로 담아서 실제 구현 내용을 외부에서 보지 못하도록 하는 것이다.
- Why?
- 외부에서 접근하여 객체가 손상되지 않도록 한다.
- How?
- 접근제한자를 사용한다.
- private, (default), protected, public
- 클래스, 필드와 메소드를 선언할 때 맨 앞에 붙힌다.
3. 추상 Abstration
- 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라고 한다. 상속받은 자식클래스가 메소드를 완성하도록 유도하는 클래스이다.
- Why?
- 필드와 메소드의 규격을 통일하기 위함이다.
- 실체 클래스를 구현할 때 시간이 절약된다.
- How?
- public abstract class 클래스명 { }
- [public | protected] abstract 리턴타입 메소드명( ); 내용은 적지 않는다.
4. 다양 Polymorphism
- 다양(다형성, Polymorphism)이란 사용 방법은 동일하지만 결과 다르게 나오는 성질이다. 다형성을 구현하기 위해서 오버로딩(Overloading, 중복)과 오버라이딩(Overriding, 재정의)이 필요하다.
- Why?
- 유지보수가 쉽다.
- 객체 재사용이 쉬워져서 개발자의 코드 재사용성이 높아진다.
- 클래스간 의존성이 줄어들어서 확장성이 높고, 결합도가 낮아져서 안정성이 높아진다.
- How?
- 오버라이딩 필수! : 자식클래스에서 메소드를 재정의
- 상속, 업캐스팅, 다운캐스팅으로도 구현할 수 있다.
클래스 Class
클래스 선언
- 객체를 생성하기 위한 금형기술(설계도)을 구현하는 것이 클래스이다. 선언된 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다.
- 클래스에는 필드(변수 데이터)와 메소드(함수)가 선언된다.
공개 클래스란?
공개 클래스(public class)는 패키지의 위치와 관계없이 사용할 수 있는 클래스이다.
클래스의 두 가지 용도
- 라이브러리(library) 클래스
- 실행할 수 없으며 다른 클래스에서 이용하는 클래스
- 실행 클래스
- main( )메소드를 가지고 있는 실행 가능한 클래스
객체를 생성할 때 초기값 설정을 해야할까?
- 클래스의 필드가 선언되면 자동으로 초기화된다.
- Why? 객체는 힙 영역에 저장되기 때문에, 스택영역은 Garbage값을