객체 지향 프로그래밍

  • 객체를 정의한 후 객체들과의 관계를 통해 프로그래밍

    객체 지향 프로그램을 구현하는 법

    • 객체를 정의하고
    • 각 객체가 제공하는 기능을 구현하고
    • 각 객체가 제공하는 기능들 간의 소통을 통하여 객체 간의 협력을 구현
  • 객체를 클래스로 구현한다
    • 하나의 클래스 파일 안에 여러 개의 클래스가 만들어질 수 있지만 public은 단 한 개만 붙어야 하고
      public 클래스와 .java파일 명은 동일하다
    • 클래스는 대문자로 시작
    • 낙타 표기법을 사용

메서드

  • 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
  • 멤버 함수라고도 함
  • 객체의 기능을 구현
  • 접근제어자, 반환형, 함수이름, 매개변수, 구현부, 반환값으로 이루어진다
    • 용어 정리
      객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
      클래스 : 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
      인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
      멤버 변수 : 클래스의 속성, 특성
      메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
      참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
      참조 값 : 생성된 인스턴스의 메모리 주소 값

생성자 new

  • 객체를 생성하는 생성자
  • 기능을 호출하는 것이 아니다
  • 객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출한다
  • 생성자는 반환 값이 없고 클래스의 이름과 동일하다
  • 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언되는 경우가 있다

기본 생성자(default constructor)

  • 클래스에는 적어도 하나 이상의 생성자가 존재한다
  • 생성자를 구현하지 않아고 new 키워드를 이용해서 생성자를 호출할 수 있다
  • 클래스에 생성자가 하나도 없다면 컴파일러가 생성자 코드를 넣어준다
  • 매개 변수가 없고 구현부가 없다

생성자 오버로딩

  • 여러가지 생성자를 정의하는 것
  • 디폴트 생성자와 매개변수를 직접 넣어서 생성하는 생성자를 모두 이용 가능

참조자료형 변수

  • 기본 자료형 : int, long, float, double, byte, char, boolean, short
  • 참조자료형 변수: 클래스형으로 변수를 선언하는 것
    ex) Student studentLee = new Student(100, "Lee");

접근 제어 지시자/정보은닉

접근 제어 지시자

  • 이 클래스 안에 있는 멤버변수, 메서드, 생성자를 어디서 사용할 수 있는지 지정하는 키워드
    • private : 같은 클래스 내부에서만 접근 가능 (외부 클래스, 상속 관계의 클래스에서도 접근 불가
    • 아무것도 없으면) : 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가
    • protected : 같은 패키지나 상속 관계의 클래스에서 접근 가능하고 그 외부에서는 접근할 수 없음
    • public : 클래스의 외부 어디서나 접근할 수 있음

get/set 메서드로 정보 은닉

  • private으로 선언된 멤버변수에 대해 접근하고 수정할 수 있는 메서드를 public으로 제공한다
  • get은 선언된 값을 불러오는 메서드, set은 메서드를 통해 그 값을 수정 또는 선언할 수 있는 메서드이다
  • 메서드를 통해 if 등으로 조건을 걸 수 있기 때문에 바로 선언되어 발생하는 오류를 막을 수 있다 -> 정보 은닉

캡슐화

  • 정보 은닉을 활용해 캡슐화를 한다
  • 꼭 필요한 정보와 기능을 오픈하고 나머지는 은닉하는 방법
  • 대부분의 변수와 메서드를 감추고 외부에서는 통합된 인터페이스를 이용하여 일관된 기능만을 구현하게 한다.
  • 직접 접근하면서 발생하는 오류를 최소화한다.

static 변수/메서드

  • 인스턴스가 생성될 때 만들어지는 것이 아닌 처음 프로그램이 메모리에 로딩될 때 메모리를 할당

싱글톤 패턴

  • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 패턴
  • static 변수, 메서드를 활용하여 구현할 수 있음
  • 인스턴스의 생성을 static으로 한 번만 하는 것

상속

  • 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현함
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현할 때 상속한다
  • extends 키워드를 사용

오버라이딩

  • 상위 클래스로 변수를 선언하고 하위 클래스의 생성자로 인스턴스를 생성
  • Customer vc = VIPCustomer(); - 가능, Customer의 메서드와 변수만 사용 가능

업캐스팅

  • 상위 클래스로 변수를 선언하고 하위 클래스의 생성자로 인스턴스를 생성
    ex) Customer vc = VIPCustomer(); Customer의 메서드와 변수만 사용 가능, 재정의를 했다면 재정의된 메서드로 사용됨

다운캐스팅/instanceof

  • 위 예시처럼 Customer vc = VIPCustomer(); 하면 VIPCustomer에서 새로 정의한 메서드를 사용할 수 없다
  • 다운캐스팅해야한다
  • ->업캐스팅된 클래스를 다시 원래의 타입으로 형 변환

    다운캐스팅 과정
    instanceof로 업캐스팅된 그 인스턴스가 원래 어떤 클래스인지 확인하고 (클래스명)인스턴스명 으로 다운캐스팅

    • 하위 클래스에 구현된 메서드를 사용할 수 있다

추상클래스

  • 구현 코드 없이 메서드의 선언만 있는 추상 메서드를 포함한 클래스
  • 메서드의 선언 : 반환 타입, 메서드 이름, 매개 변수
  • 메서드 정의 : 메서드 구현과 동일한 의미 구현부를 갖는다
  • 정의가 없는 것이 추상메서드
  • abstract 예약어를 사용
  • 추상 클래스는 new할 수 없음 = 인스턴스화 할 수 없다!!
  • 추상클래스가 아니더라도 abstract를 붙여 추상 클래스를 만들 수 있고 그 경우에도 그 클래스는 new될 수 없다
  • 하위 클래스로 다시 상속해서 구현 후 사용해야함

인터페이스

  • 모든 메서드가 추상 메서드로 선언됨 -public abstract
  • 모든 변수는 상수로 선언됨 - public static final
  • 인터페이스의 바로 하위 클래스는 implements 키워드를 사용한다

    인터페이스를 사용하는 이유

    • 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
      일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세
    • 클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음
    • 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미
    • 인터페이스를 구현한 다양한 객체를 사용함 - 다형성
profile
안녕하세요. Chat JooPT입니다.

0개의 댓글