Day 12

강태훈·2026년 1월 14일

nbcamp TIL

목록 보기
12/58

1번 퀴즈2번 퀴즈3번 퀴즈

간단히 플로우차트 퀴즈를 보았다

1. static

  • 모든 객체가 함께 사용하는 변수나 메서드를 만들때 사용
  • 객체(인스턴스)를 만들지 않아도 클래스 이름만으로 바로 사용할 수 있다.
  • 모든 객체가 같은 값을 공유
  • static 변수와 메서드는 한 번만 생성되고 Method Area(메서드영역) 에 저장
  • Static 메서드에서는 인스턴스변수에 접근할 수 없다.

(1) 인스턴트 멤버

  • 객체를 만들때마다 생성되는 변수와 메서드
  • 각 객체가 개별적으로 값을 가짐(공유되지 않음)
  • 객체(인스턴스)를 생성한 후에만 사용할 수 있음

(2) 클래스 멤버

  • 클래스 자체에 속하는 변수와 메서드
  • static 키워드를 사용해서 선언
  • 해당 클래스로 만들어진 객체가 공유해서 사용
  • 객체 생성없이 사용 가능

2. final

  • 값 변경 불가 또는 참조 변경 불가를 의미
  • 변수는 변경이 불가능하게 만듬
  • 클래스는 상속할수없게 만듬
  • 메서드는 수정할수없게 만듬(오버라이딩 불가)

(1) 상수

  • 변하지 않고 항상 일정한 값을 갖는 수
  • static final을 사용
  • 대문자

(2) 불변객체(Immutable Object)

  • 내부상태를 변경할수없는 객체
  • 세터 없이 설계
사용 예시
public final class Circle {

  final static double PI = 3.14159; 
  final double radius; // ✅ final 로 선언해서 값이 변경되지 않도록 합니다.

  Circle(double radius)  {
      this.radius = radius;
  }
}

3. 인터페이스

  • interface: 설계 표준
  • 클래스가 따라야할 최소한의 공통 규칙을 정의하는 역할
  • 클래스에서 implements 키워드로 다수의 인터페이스를 활용할 수 있다
  • 구현체: 인터페이스를 구현한 클래스
다중구현 예시
// 🚀 "동물의 기본 기능" 인터페이스
interface Animal {
  void eat();
}

// ✈ "나는 기능" 인터페이스
interface Flyable {
  void fly();
}

// ✅ 다중 구현 
class Bird implements Animal, Flyable {
  public void eat() {
      System.out.println("새가 먹이를 먹습니다.");
  }

  public void fly() {
      System.out.println("새가 하늘을 납니다.");
  }

  // 추가적으로 land() 메서드도 가능하지만 필수는 아님
  public void land() {
      System.out.println("새가 착륙합니다.");
  }
}
// 실행 코드
public class Main {
  public static void main(String[] args) {
      Bird bird = new Bird();
      bird.eat();  // "새가 먹이를 먹습니다."
      bird.fly();  // "새가 하늘을 납니다."
      bird.land(); // "새가 착륙합니다."
  }
}

객체지향

1. 캡슐화

  • 객체의 정보를 외부에서 직접 접근하지 못하게 보호하는 개념
  • 클래스 혹은 객체의 캡슐화는 접근제어자 를 통해서 구현할수있다.
    • 접근제어자:
      • 클래스, 변수, 메서드, 생성자의 접근 범위를 제한하는 키워드
      • public, private
    • 게터와 세터

2. 상속

  • 클래스간의 관계를 부모(상위), 자식(하위)로 바라보는 개념
  • 물려받은 속성과 기능은 자식 클래스에서 재사용할 수도 있고, 확장할수도 있음
  • extends 키워드를 사용해서 상속관계를 구현
    • super
      • 부모클래스의 멤버에 접근할 때 사용하는 키워드
      • 자식 클래스에서 부모의 변수나 메서드를 명확하게 호출할 때 사용
    • 메서드 오버라이딩
      • 부모 메서드를 자식 클래스에서 변경하여 재정의하는 것을 의미
      • 오버라이드된 메서드에는 @Override 키워드를 붙인다
      • 메서드 이름, 매개변수, 반환타입이 완전히 동일해야함
      • 접근 제어자는 부모보다 더 강한 수준으로만 변경 가능

3. 추상화

  • 불필요한 정보를 제거하고 본질적인 특징만 남기는 것을 의미
  • 객체지향 프로그래밍에서는 추상화의 계층적 특징을 활용해서 유지보수성이 좋은 프로그램을 만들 수 있음
  • 인터페이스 상속, 클래스 상속을 활용해서 추상계층을 표현

4. 다형성

  • 하나의 타입으로 여러 객체를 다룰 수 있는 객체지향의 특징
  • 추상 계층이라는 특징을 활용해서 다형성을 구현
  • 형변환
    • 부모타입으로 자식타입을 다룰 수 있는 이유는 자동으로 형변환(Casting)이 발생했기 때문입니다.
    • 업캐스팅(UpCasting): 자식타입 → 부모타입
      • 주의 사항: 업캐스팅은 부모의 타입으로 데이터를 다룰 수 있지만 자식 클래스의 고유기능을 활용할 수 없다.
    • 다운캐스팅(DownCasting): 부모타입 → 자식타입
      • 자식 클래스의 고유 메서드를 사용
      • 주의사항: 잘못된 다운캐스팅은 컴파일단계에서 감지할 수 없다.
      • 그래서 다운캐스팅을 사용할때 항상 instanceof 를 활용해야함.
      • instanceof: 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인해 주는 역할

0개의 댓글