STUDY/JAVA

[생활코딩! 자.프.입] 3부 : 객체지향 프로그래밍

yeonee911 2025. 1. 21. 21:26

1. 객체 지향 프로그래밍(OOP)

  • 객체 : 서로 연관된 기능별로 그룹화된 단위
  • 추상화 : 해결해야 할 문제 또는 반영해야 할 현실을 소프트웨어 방식으로 단순화하는 행위
  • 소프트웨어 설계 : 복잡한 현실을 추상화하는 과정

 

  • 부품화 : 좋은 객체를 만든다는 것은 로직을 재활용할 수 있게 부품화 하는 것
  • 은닉화, 캡슐화 : 내부의 동작방법을 객체에 숨기고 사용자에게는 그 부품의 사용법만 노출하는 것을 정보 은닉화/캡슐화
  • 인터페이스 : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면

 

2. 클래스와 인스턴스, 그리고 객체

  • 클래스 : 객체를 만들기 위한 일종의 설계도 
    • static 키워드가 붙음
  • 인스턴스 : 그 설계도에 따라서 만든 구체적인 제품
    • static 이 붙지 않음

 

  • 인스턴스 메소드 클래스 멤버 접근 가능
    • 인스턴스 메소드는 인스턴스에 속한 메소들로서 static이라는 키워드가 지정되지 않은 메소드이다.
    • 인스턴스 메소드 안에서 클래스 변수와 클래스 메소드에 접근할 수 있다
  • 클래스 메소드 인스턴스 멤버 접근 불가능
    • 클래스라는 것은 언제나 메소드보다 먼저 존재한다. 왜냐하면 설계도를 만들고 이 설계도에 따라 만들어진 구체적인 제품인 인스턴스를 나중에 만들기 때문.
    • 클래스 메소드는 그 클래스를 기반으로 만들어진 인스턴스에 접근하는 것이기 때문에 아직 생성되지 않은 인스턴스에 접근하는 것이다. 
    • 어떤 변수에 인스턴스가 담겨 있는지 조차도 클래스 안에서는 알 수 없다.

 

3. 유효 범위

package org.opentutorials.javatutorials.scope;

class C{
    int v = 10;
    void m() {
       int v = 20;
       System.out.println(v);
       System.out.println(this.v);
    }
}

public class ScopeDemo {
    public static void main(String[] args) {
       C c1 = new C();
       c1.m();
    }
}

// 출력 결과
// 20
// 10
  • this : 인스턴스의 인스턴스 자신을 의미하는 값

 

4. 상속과 생성자

  • 상속받은 하위 클래스의 인스턴스가 생성될 때 상속한 상위 클래스의 기본 생성자를 자동으로 호출한다. 
  • 만약 부모 클래스에서 매개변수가 있는 생성자를 선언하면 자동으로 기본생성자가 생성되지 않아서 오류 발생

 

4.1 super

  • super : 부모 클래스 의미
  • super() : 부모 클래스생성자
  • 주의!  : 하위 클래스의 초기화 코드를 super보다 먼저 등장시키면 안된다. 

 

5. 오버라이딩

  • 상속은 부모 클래스에 어떠한 기능을 추가만 하는 경우
  • 오버라이딩은 부모 클래스의 메소드를 그대로 쓰지 않고 자식 클래스의 필요에 따라 메소드를 재정의. 이때 부모 클래스의 메소드는 무시된다. 

 

5.1 오버라이딩 주의사항

  • 부모 클래스의 메소드 형식과 자식 클래스의 메소드 형식이 불일치하는 경우 오버라이딩할 수 없다. 즉 오버라딩하기 위해서는 부모 클래스와 자식 클래스의 반환 타입이 일치해야한다. 
  • 메소드의 이름이 같아야한다
  • 매개변수 개수와 반환 타입이 같아야한다

 

5.2 오버라이딩 조건 (메소드의 서명=signature) 

  1. 메소드 이름
  2. 메소드 매개변수의 개수와 데이터 타입, 순서
  3. 메소드의 반환 타입
  • Tip! 자식 메소드에서 부모 메소드를 호출할 때는 super키워드를 사용한다.

 

6. 오버로딩

  • 정의 : 클래스에 메소드를 정의할 때 이름이 같지만 서로 다른 매개변수 형식을 지닌 메소드를 여러 개 정의할 수 있는 방법
  • 규칙 : 메소드의 이름과 반환값은 같아야하 하지만 매개변수는 달라야한다.