OOP(Object Oriented Programming)란 ?
데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체의 상호작용을 통해 프로그램이 동작하는 것. 캡슐화, 다형성, 상속을 이용하여 코드 재사용을 증가시키고, 유지보수를 감소시키는 장점을 얻기 위해서 객체들을 연결시켜 프로그래밍 하는 것.
특성
캡슐화(Encapsulation)
- 연관 있는 변수와 메소드를 하나의 클래스로!
- 객체의 역할, 목적을 하나의 클래스로!
- 외부에서 객체의 변수에 직접 접근이 불가능 하게, 메소드로만 접근가능 하게!
추상화(Abstraction)
- 객체 지향 관점에서 클래스를 정의하는것.
- 캡슐화로 하나의 클래스를 만들었다면, 이름을 붙여주는 것이 추상화
다형성(Polymorphism)
- 상속 받은(
extends
/implements
) 메소드가 Overriding 되어 사용 되는 것
상속성, 재사용(Inheritance)
- 상위(부모클래스)의 변수와 메소드를 하위(자식클래스) 물려받는 것
왜 인터페이스를 사용하는가?
팀작업시 개발코드 부분과 객체가 서로 통신하는 접점 역할을 지원하게 되는데, 이는 개발코드에선 객체의 내부 구조를 모르더라도 인터페이스의 메서드 명만 알고 있으면 되기 때문이다.
이를 통해 얻을 수 있는 장점은 해당 메서드를 통해 나오는 결과물을 알고 있기 때문에 다른 팀의 작업을 기다리고 있지 않아도 되며, 또한 해당 객체가 수정될 경우 개발 코드 부분은 수정을 하지 않아도 된다.
또한, 부가적으로 객체를 파일에 쓰기 위해 Serializable 인터페이스를 구현하거나, Collections.sort()를 하기 위해서 Comparable 인터페이스를 상속하는 것, Cloneable 을 구현하는 것처럼 특정 작업을 하겠다라는 Mark
역할을 해주기도 한다
Interface VS abstract(자바 8기준)
추상클래스와 인터페이스는 인스턴스화 하는 것은 불가능하다, 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있다는 점에서 유사하다.
인터페이스에서 모든 변수는 기본적으로 public static final(상수)
이며, 모든 메소드는 퍼블릭 abstract 인 반면, 추상클래스에서는 static
이나 final
이 아닌 필드를 지정할 수 있고, public
, protected
, private
메소드를 가질 수 다.
인터페이스를 구현하는 어떤 클래스는 다른 여러개의 인터페이스들을 함께 구현할 수 있다. 추상클래스는 상속을 통해 구현되는데, 자바에서는 다중상속을 지원하지 않으므로 추상 클래스를 상속받은 서브클래스는 다른 클래스를 상속받을 수 없다.