OOP 정리

5w31892p·2022년 12월 28일
0

Java

목록 보기
16/17

:: 클래스

클래스 안에 선언 -> 객체 변수
클래스에 의해 선언 -> 객체 (new)
클래스 안에 구현된 함수 -> 메서드
믹서기 = 메서드 / 과일 = 입력값 / 과일주스 = 리턴값

:: 메서드

메서드에 전달되는 값 저장하는 변수 -> 매개변수(parameter)
메서드에 전달하는 값 -> 인자(arguments)
리턴값이 있는 메서드는 리턴값 받을 변수가 필요하다.
입력값이 있는 메서드는 Input arguments가 필요하다.

...

type methodName (parameter(type var1), parameter(type var2), ...) {
}

...

type var = object.methodName(arguments(val1), arguments(val2)) // 리턴값 입력값 모두 O
object.methodName(arguments(val1), arguments(val2)) // 입력값만
type var = object.methodName() // 리턴값만
object.methodName() // 리턴값 입력값 모두 X

...

:: 상속

IS-A 관계

People cheolsu = new Cheolsu();
// -> Cheolsu is a People

메서드 오버라이딩 : 상속 받은 메서드 수정
메서드 오버로딩 : 입력 값의 타입이 다른 경우 or 추가 (변경x)

void sleep() {
  System.out.println("zzz")
}

// 오버라이딩
void sleep() {
  System.out.println("zzz in house")
}

// 오버로딩
void sleep(int hors) {
  System.out.println("zzz in house" + hors + "hors.")
}

:: 생성자

클래스명, 메서드명 동일
리턴타입 놉! void도 놉!

class Dog {
  // 기본 생성자
  Dog() {} 
  
  // 아래와 같이 매개변수 있을 시, 호출할 때 인수 입력 받아야 한다.
  Dog(String name) {
    this.setName(name)
  }
  
  // 생성자도 오버로딩 가능
  // 입력 항복이 다른 생성자를 여러개 만드는 것
  Dog(int type) {
    if (type == 1) {
      this.setName("이름1")
    } else if (type == 2) {
      this.setName("이름2")
    }
}

:: 인터페이스

IS-A 관계 동일 적용
동일한 메서드 반복해서 추가해야할 경우 인터페이스 사용
인터페이스 메서드는 이름과 입출력만 정의, 내용 구현은 implements한 class가 구현한다.
일반 클래스는 다중상속이 허용되지 않지만,
인터페이스는 extends를 통해 다중 상속이 가능하다.

interface a extends B, C {
  String getFood();
}

...

class aa implements a {
  public String getFood() {
    return "바나나";
  }
}
...

:: 다형성

객체가 하나 이상의 자료형 타입 갖게 되는 특성
콤마로 인터페이스 여러개 implements 할 수 있다.
즉, 하나의 객체가 여러개 자료형 타입 가질 수 있는 것이 다형성이다.
istanceof : 특정 객체가 특정 클래스의 객체인지 조사하는 자바 내장함수
a(객체) istanceof B(클래스) : a는 B로 만들어졌니?

Tiger tiger = new Tiger(); // Tiger is a Tiger
Animal animal = new Tiger(); // Tiger is a Animal
Predator predator = new Tiger(); // Tiger is a Predator
Barkable barkable = new Tiger(); // Tiger is a Barkable

:: 추상클래스

인터페이스 역할도 하고, 클래스 역할도 하고~
추상클래스의 메서드도 정의만 하고 있으므로, 상속하는 클래스가 구현해야 한다.

abstract class 추상클래스명 {
  abstract type 메서드명();
}
...

제어문 활용 잘하기
리스트, 배열 값의 평균이나 합을 구할 때는 당황하지 말고 for each문 사용하기
Integer은 값이 없으면 null
그러므로 생성자로 초기값을 대입해줘야 한다.

클래스명과같은생성자명() {
  this. Integer변수명 = 0;
}

0개의 댓글