자바 기초문법(1) - 객체지향언어의 특징
처음 써보는 기술블로그이자 첫 번째 포스트…!!
두서없이 막 쓸 것 같다.
OOP is A PIE - 객체지향의 특징 4가지
추상화(Abstraction)
다형성(Polymorphism)
상속(Inheritance)
캡슐화(Encapsulation)
1. 추상화(Abstraction)
현실의 객체가 갖는 속성과 기능은 추상화 되어 클래스에 정의된다.
클래스는 구체화되어 프로그램의 객체가 된다.
2. 다형성(Polymorphism)
-
항상 헷갈리는 오버로딩(overloading)과 오버라이딩(overriding).
오버로딩은 과적재. 한 클래스 내에서 이름은 같지만 다르게 동작하는 메서드를 여러개 작성하는 것.오버라이딩은 over-writting. 부모클래스의 메서드를 자식 클래스에서 동일한 이름으로
자신의 특징에 맞게 재작성하는 것.- 오버라이딩한 자식의 접근 제한자는 부모보다 같거나 더 넓어야 한다.
static: 정적인 != 고정된
⇒ 바뀔수는 있지만 거의 안바뀌는(ex: 학명)
멤버 변수 중 static이 붙는 클래스 멤버는 객체와 무관하며
클래스 로딩 시 클래스 영역에 메모리가 할당된다. - 모든 클래스에는 Object 클래스에 정의된 메서드가 있다.
- 메서드가 오버라이드 된 경우, 무조건 자식 클래스의 메서드가 호출된다.
- 오버라이딩한 자식의 접근 제한자는 부모보다 같거나 더 넓어야 한다.
-
부모 객체는 자식을 담을 수는 있지만(메모리에 있음) 자식의 내용에 접근할 수 없다.
이 때 필요한게 참조형 객체의 형 변환(캐스팅).묵시적 캐스팅은 자손 타입의 객체를 조상 타입으로 참조하는 것으로, 형변환 생략이 가능하다.
명시적 캐스팅은 조상 타입을 자손 타입으로 참조하는 것으로, 형변환 생략이 불가능하고 명시적 캐스팅 이후에는 자식의 내용에 접근할 수 있다.
- 다형성을 사용하는 이유 : 관리는 편리하게, 기능은 원하는대로!
Person 클래스 하나로 스파이더맨, 배트맨, 슈퍼맨, 일반인, 직장인.. 등등을 한번에 관리할 수 있다.
3. 상속(Inheritance)
부모 클래스와 자식 클래스 간에 is a 관계가 성립될 때 구현한다.
딱히 쓸게 없네
4. 캡슐화(Encapsulation)
Singleton 디자인 패턴
객체의 인스턴스가 오직 1개만 생성되는 패턴(객체의 생성을 제한한다).
아직 singleton 패턴을 사용해보지 않아서 이후에 추가 작성하겠다.
객체가 여러개 만들어질 필요가 없거나 1개만 만들어져야 할 경우, 싱글톤 디자인 패턴을 적용시킨다.
방법은 여러가지가 있다고 하지만 내가 배운건 가장 간단한 방법.
아래의 예시를 살펴보자.
private static BookManagerImpl bookManager = new BookManagerImpl();
private BookManagerImpl() {
}
public static BookManagerImpl getBookManager() {
return bookManager;
}
기본생성자의 접근제어자를 private으로 설정해 외부에서 BookManagerImpl 객체를 생성하지 못하게 하고,
getBookManager 메서드(getter)를 통해 private 변수인 bookManager를 호출하도록 하는 것.
이 때, 객체 없이 외부에서 접근할 수 있도록 변수와 getter에 static을 붙인다.