자바의 객체지향 프로그래밍에는 상속, 캡슐화, 다형성, 추상화가 있다.
기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이
단일상속만 가능
'~은 ~이다. ex) sportscar는 car이다.
cf) 포함관계 : 상속 외 클래스를 재사용하는 방법, 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
--> '~은 ~을 가지고 있다.
ex) 원은 점을 가지고 있다.
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것(new)
오버라이딩 : 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것(change)
super : 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수, 상속받은 멤버와 자신의 멤버의 이름이 같을 때 상속받은 멤버에 super를 붙여 구분
super( ) : 조상의 생성자를 호출하는데 사용
특정 객체 안에 관련된 속성과 기능을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것
정보 은닉(data hiding) : 데이터 보호, 내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출을 방지 목적
-->외부로부터 객체의 속성과 기능이 함부로 변경되지 못하게 막고, 데이터가 변경되더라도 다른 객체에 영향을 주지 않기에 독립성을 확보
캡슐화를 수행하기 위한 핵심적인 수단으로 접근제어자(Access Modifier)와 getter와 setter 메서드가 있다.
멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할
사용될 수 있는 곳 : 클래스, 멤버변수, 메서드, 생성자
접근 가능 범위
객체지향의 캡슐화의 목적을 달성하면서도 데이터의 변경이 필요한 경우 대표적으로 private 접근제어자가 포함되어 있는 객체의 변수의 데이터 값을 추가하거나 수정하고 싶을 때 getter와 setter 메서드를 사용할 수 있다.
외부에서 메서드에 접근하여 조건에 맞을 경우 데이터 값을 변경 가능하게 해줌
일반적으로 메서드명에 set-을 붙여서 정의
이렇게 설정한 변수 값을 읽어오는 데 사용하는 메서드
경우에 따라 객체 외부에서 필드 값을 사용하기에 부적절한 경우가 발생할 수 있음, 이럴 경우 그 값을 가공한 이후에 외부로 전달하는 역할을 함
일반적으로 메서드명에 get-을 붙여서 정의
자바에서 다형성이란 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것으로, 상위 클래스 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것을 말한다.
인스턴스를 같은 타입의 참조변수로 참조하는 것과 상위 클래스 타입의 참조변수로 참조하는 것은 둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다는 차이점이 있다.
SmartTV s = new SmartTV(); // 참조 변수와 인스턴스의 타입이 일치
Tv t = new SmartTv(); // 상위 클래스 타입 참조변수로 하위 클래스의 인스턴스를 참조
Tv가 SmartTv의 상위클래스라고 할 때, 인스턴스를 상위 클래스 타입의 참조변수로 참조하는 t는 SmartTv인스턴스의 멤버 중 Tv클래스에 정의되지 않은 멤버는 사용이 불가능하다.
참조변수의 다형적인 특징은 메서드의 매개변수에도 적용된다.
쉽게 말해 큰 객체 안에 작은 객체를 넣어서 여러 형태로 변환해 사용하는 것이다.