본문 바로가기

웹 백엔드/패스트캠퍼스) 백엔드시그니처

패스트캠퍼스) 백엔드시그니처 Course1: 객체지향 프로그래밍

728x90
반응형

Ch 01. 자바에서 상속이란

  • 상속(Inheritance)의 개념:
    • 기존 클래스의 기능을 재사용하면서 새로운 기능을 추가할 수 있는 기능.
    • 코드의 재사용성과 유지보수성을 향상.
  • 상속 구문:
class Parent {
    void display() {
        System.out.println("부모 클래스");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("자식 클래스");
    }
}
  • 실습 예제:
    • 부모(Parent) 클래스의 메서드를 자식(Child) 클래스에서 상속받아 활용.
    • 자식 클래스에 새로운 메서드 추가 및 기능 확장.

Ch 02. 상속관계에서 객체 생성 및 Override

  • 상속 관계의 객체 생성 원리:
    • 자식 객체를 생성하면 부모 객체가 먼저 생성된 후 자식 객체가 생성됨.
  • 메서드 오버라이딩(Override):
    • 상속받은 메서드를 자식 클래스에서 재정의하여 동작을 변경.
  • 오버라이딩 예제:
class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}
  • 결론: 오버라이딩을 활용해 자식 클래스에서 동작을 원하는 대로 변경할 수 있으며, 객체 생성 시 부모-자식 관계의 생성 순서 이해가 중요.

Ch 03. 객체 형변환(Object Casting)

  • 형변환(Casting)이란?
    • 업캐스팅(Upcasting): 자식 클래스 객체를 부모 클래스 타입으로 변환.
    • 다운캐스팅(Downcasting): 부모 클래스 타입을 자식 클래스 타입으로 변환(명시적 변환 필요).
  • 형변환 예제:
class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("멍멍");
    }
}

Animal animal = new Dog(); // 업캐스팅
animal.sound(); // 동물 소리 출력

Dog dog = (Dog) animal; // 다운캐스팅
dog.bark(); // 멍멍 출력
  • 결론: 업캐스팅은 자동 변환되지만, 다운캐스팅은 강제 변환이 필요하며 형변환 오류 방지를 위해 instanceof 연산자 활용 가능.

Ch 04. 다형성(Polymorphism)과 활용

  • 다형성(Polymorphism)의 개념:
    • 하나의 객체가 여러 형태를 가질 수 있는 특성.
    • 부모 클래스로 참조하되, 자식 클래스의 메서드를 호출할 수 있음.
  • 다형성 예제:
class Animal {
    void sound() {
        System.out.println("동물 소리");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}

class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();
        
        animal1.sound(); // 멍멍
        animal2.sound(); // 야옹
    }
}
  • 결론: 코드의 유연성과 확장성을 높여 객체지향 프로그래밍의 핵심 개념을 실현.

Ch 05. 추상클래스와 인터페이스의 등장

  • 추상 클래스(Abstract Class):
    • 일부 메서드는 구현되고, 일부는 구현되지 않은 클래스.
    • 상속받아 구체적으로 구현해야 함.
abstract class Animal {
    abstract void sound(); // 추상 메서드

    void sleep() { // 일반 메서드
        System.out.println("잠자기");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍");
    }
}
  • 인터페이스(Interface):
    • 메서드의 선언만 포함하고 구현은 제공하지 않음.
    • 다중 상속을 지원하여 유연한 설계 가능.
interface Animal {
    void sound();
}

class Dog implements Animal {
    public void sound() {
        System.out.println("멍멍");
    }
}
  • 결론: 추상 클래스는 상속을 통해 확장하고, 인터페이스는 구현을 강제하여 구조적 유연성을 제공.

 


Ch 06. 자바 최상위 클래스 Object

  • Object 클래스란?
    • 자바의 최상위 클래스. 모든 클래스는 Object를 상속받음.
  • Object의 주요 메서드:
    1. toString(): 객체 정보를 문자열로 반환.
    2. equals(): 객체 비교.
    3. hashCode(): 해시 코드 반환.
    4. getClass(): 객체의 클래스 정보 반환.
class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "이름: " + name;
    }
}

public class Test {
    public static void main(String[] args) {
        Person p = new Person("홍길동");
        System.out.println(p.toString()); // 이름: 홍길동
    }
}
  • 결론: Object 클래스의 메서드를 재정의하여 객체의 기본 동작을 커스터마이징할 수 있다.
728x90
반응형