java는 프로그래밍 방법론 중 하나인 OOP 방법론에 입각한 언어임은 잘 알고 있다. OOP 에 입각하여 java를 어떻게 활용하고 있나 라고 물어보면 상속, 인터페이스, 캡슐화, 추상화, 전략패턴 등이 떠오른다.
이러한 지식들을 한번 더 정리해보고자 한다.
여러 객체들의 공통된 특성을 묶어 상위개념으로 표현하는것.
불필요한 코드를 제거하고 핵심한 강조하여 단순하게 만드는 것.
public class SuperCar {
public void move() {
System.out.println("슈퍼하게 달립니다.");
}
}
public class SnowCar {
public void move() {
System.out.println("겨울에 잘 달립니다.");
}
}
public class FastCar {
public void move() {
System.out.println("빠르게 달립니다.");
}
}
//다음과 같이 자동차들의 공통된 속성인 move 를 상위 클래스로 뽑아낼 수 있을때
public abstract class Car {
public abstract void move();
}
public class FastCar extends Car{
@Override
public void move() {
System.out.println("빠르게 달립니다.");
}
}
public class SnowCar extends Car {
@Override
public void move() {
System.out.println("겨울에 잘 달립니다.");
}
}
public class SuperCar extends Car {
@Override
public void move() {
System.out.println("슈퍼하게 달립니다.");
}
}
객체의 필드와 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감춘다.
외부 객체는 제공하는 필드와 메소드만 이용할 수 있다.
캡슐화는 외부의 잘못된 사용으로 인해 객체가 침해 당하지 않게 한다.
노출을 위해 접근 제한자를 사용한다.
package Encapsulation;
public class Programmer {
private String name;//private 접근 제한자로 은닉화.
private String blog;
//변수에 접근하기 위해 메소드를 사용
public void setName(String name) {
this.name = name;
}
public void setBlog(String blog) {
this.blog = blog;
}
public String getName() {
return name;
}
public String getBlog() {
return blog;
}
}
package Encapsulation;
public class ProgrammerTest {
public static void main(String[] args) {
Programmer pg = new Programmer();
pg.setName("semy song");
pg.setBlog("yein blog");
System.out.println("이름: "+pg.getName());
System.out.println("블로그: "+pg.getBlog());
}
}
하나의 객체가 여러가지 타입을 가질 수 있는 것 의미.
부모 타입에는 모든 자식 객체가 대입될 수 있으며 자식 타입은 부모 타입으로 자동 타입변환 됨.
class Animal {
public void sound() {
System.out.println("Some sound");
}
}
class Lion extends Animal {
public void sound() {
System.out.println("Roar");
}
}
class Main
{
public static void main(String[] args)
{
//Parent class reference is pointing to a parent object
Animal animal = new Animal();
animal.sound(); //Some sound
//Parent class reference is pointing to a child object
Animal animal = new Lion();
animal.sound(); //Roar
}
}
자식클래스가 부모 클래스의 멤버를 물려받을 수 있는 성질.