java 와 OOP 방법론

.·2021년 11월 7일

JAVA

목록 보기
3/4

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
   }
}

상속

자식클래스가 부모 클래스의 멤버를 물려받을 수 있는 성질.

profile
yi

0개의 댓글