OOP(Object Oriented Programming) 객체지향 프로그래밍

특징

  • Abstraction(추상화)
  • Encapsulation(은닉성, 캡슐화)
  • Inheritance (상속성)
  • Polymorphism(다형성)

프로그래밍 절차

  • 실세계 >[객체모델링]> 모델(UML) >[클래스정의]> 클래스 >[객체 생성]> 메모리로딩
  • 객체지향 프로그램 다이어그램 UML(Unified modeling language)

클래스

  1. 구체 클래스(Consrete Class) - 모델링한 객체를 직접 생성할 수 있는 클래스
  2. 추상 클래스(Abstract Class) - 상속받은 하위클래스에서 오버라이딩 할수 있는 클래스
    • 추상클래스는 반드시 상속을 받아야만 함으로, 추상 메서드를 가지지 않더라도 하위 클래스가 반드시 상속받도록 하기위해 일부로 추상클래스 선언하는 경우가 있음
    • 추상클래스를 직접 생성하여 사용할 수 없음
  3. 인터페이즈 - 실제 객체를 모델링한 구체적인 코드 구현이 없고, 기능만 명시한 클래스
    • 상수 - public static final
    • 추상메서드 - public abstract
    • 인터페이스는 ‘interface’키워드를 통하여 선언
    • 클래스 선언시 ‘implements’키워드로 인터페이스 구현
    • 인터페이스는 다중구현이 가능하며 구분자로 콤마 사용 (ex : String Class)
      • public final class String extends Object implements
      • Serializable, Comparable, CharSequence {}
  4. 인터페이스 구현 클래스는 모든 추상 메서드를 구현
  5. 일부 메서드만 구현하는 경우 추상 클래스로 선언
public interface 인터페이스 이름{
   데이터타입 상수명 = 상수값;
   리턴타입 메서드이름([인자(argument)]); //자동으로 추상메서드가 됨
}

//인터페이스 예시
public interface Vehicle{

   int FORWARD = 1;
   int BACKWARD = 2;
   int LEFT = 3;
   void moving(int direction, int speed);
   void speedUp();
   void speedDown();
}

interface Animal {} //인터페이스 선언 
adctract class Pet implements Animal {} //인터페이스 구현(추상클래스) 
class Dog extends Pet {} //클래스 상속 
class Cat extends Pet {} //클래스 상속 
// Animal, Pet은 직접 생성/사용할 수 없음

지시자

static

  • 공유 변수
  • 지역변수에 static을 사용할수 없음
  • [접근제한자] static class 클래스이름() {}

final

  • 확정 (변경불가)
    1. 변수에 사용 - 값을 변경할 수 없는 상수
    2. 메서드에 사용 - 오버라이딩 할 수 없음
    3. 클래스에 사용 - 자신을 확장하는 자손클래스를 정의하지 못함
  • [접근제한자] final class 클래스이름() {}
  • [접근제한자] (변수의 경우 이곳에 static이 들어가는 경우가 많음) final 데이터타입 상수이름 = 상수값;

abstract

  • 추상 - 실체가 없기 때문에 변수에 사용불가능
  • 추상클래스는 선언부만 있고 구현부가 없음, 서브 클래스에서 상속받아 기능구현 해야함
  • 추상메서드를 한개라도 포함하고 있다면 추상클래스로 선언 해야함
public abstract 리턴타입 메서드이름([인자(argument)]);

public abstract class Car{
   public abstract void moving(int direction, int speed);
}
public class Truck extends Car{
   public void moving(int direction, int speed){
       //구현부분
   }
}