[TIL#4] Java 문법 종합반 3주차(1)

Jiwoo·2024년 4월 24일
0

내일배움캠프

목록 보기
8/65
post-thumbnail

학습 내용


객체지향 프로그래밍

📌 객체

  • 세상에 존재하는 물체, 식별 가능
  • 자동차의 회사, 모델, 색상, 가격 → 필드
  • 자동차의 가속, 브레이크, 조명, 경적 → 메서드
  • 객체 모델링

📌 객체 간의 관계

  • 사용 관계: Person → Car
  • 포함 관계: Car ← Tire, Door, Handle
  • 상속 관계: MachineSystem → Car, Train

📌 객체지향 프로그래밍 특징

  • 캡슐화
    속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 외부에서 알 수 없게 감추는 것

  • 상속
    부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려줘 사용할 수 있도록 한다

  • 다형성
    객체가 연산을 할 때 하나의 행위에 대해 객체의 고유한 특성에 따라 여러가지 형태로 재구성
    ex) Car: 빵 / Car2: 빠앙 / Car3: 빠아앙

  • 추상화
    객체에서 공통된 부분들 모아 상위 개념으로 새롭게 선언
    ex) 공통적으로 가지고 있는 가속, 브레이크, 속도 → 자동차라는 객체


클래스

📌 클래스 설계 4 STEP

  1. 클래스 선언
public class Car {}
  1. 필드 정의
String company; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed;  // 자동차 속도 , km/h
char gear; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
  1. 생성자 정의
public Car() {} // 생성자는 반환 타입 X 
				// 클래스 이름과 동일
  1. 메서드 정의
double gasPedal(double kmh) {
    speed = kmh;
    return speed;
}
double brakePedal() {
    speed = 0;
    return speed;
}

객체 생성과 참조형 변수

📌 객체 생성

new Car(); // Car클래스 객체 생성

📌 참조형 변수

Car car1 = new Car(); // Car클래스의 객체인 car1 인스턴스 생성
Car car2 = new Car(); // Car클래스의 객체인 car2 인스턴스 생성

📌 객체 배열

Car[] carArray = new Car[3];
Car car1 = new Car();
car1.changeGear('P');
carArray[0] = car1;

객체는 참조형 변수와 동일하게 취급되므로 배열이나 컬렉션에도 저장 가능


객체의 속성: 필드

객체의 데이터 저장하는 역할

필드 사용 방법? = 필드의 값을 변경하거나 읽는 것

📌 외부 접근

Car car = new Car();

-> 참조 변수 car 이용해 외부에서 객체 내부의 필드에 접근해 사용

car.color = "blue";

-> 객체의 내부 필드에 접근 (도트 연산자 사용)

📌 내부 접근

double brakePedal() {
    speed = 0;
    return speed;
}

메서드 내부에서 객체의 필드 speed 바로 호출해 사용 가능

📌 오버로딩

하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능

  • 조건

    • 메서드의 이름이 같고 매개변수의 개수, 타입, 순서가 달라야 한다

    • 응답 값만 다른 것은 오버로딩 X

    • 접근 제어자만 다른 것도 오버로딩 X

    • 즉, 매개변수의 차이로만 구현 가능


객체의 행위: 메서드

인스턴스 멤버와 클래스 멤버

선언하는 방법에 따라 인스턴스 멤버와 클래스 멤버로 구분

📌 인스턴스 멤버

  • 객체 생성 후 사용 가능
  • car1, car2, ...
  • 인스턴스를 통해서만 메서드 사용될 수 있도록 제한 걸어둠

📌 클래스 멤버

  • 객체 생성 없이도 사용 가능
  • static 키워드 사용, 클래스 이름으로 바로 접근 가능
  • 공용적인 데이터 저장
  • static으로 선언해 놓은 메서드는 인스턴스화 안 시켜도 돼서 언제든 호출 가능

this, this()

📌 this

  • 인스턴스 자신!

  • 객체 내부 멤버에 접근하기 위해 사용

public Car(String model, String color, double price) {
    model = model;
    color = color;
    price = price;
}
  • 위의 예시처럼 생성자 선언하는데 매개변수명과 객체의 필드명이 같으면 자기 자신에게 값 대입하는 상황 ;
public Car(String model, String color, double price) {
    this.model = model;
    this.color = color;
    this.price = price;
}
  • 리턴 타입이 인스턴스 자신의 클래스 타입이라면 this 사용해 주소 반환
Car returnInstance() {
    return this;
}

📌 this()

  • 인스턴스 자신의 생성자 호출

  • 필드 코드의 중복 줄일 때 사용

public Car(String model) {
    this.model = model;
    this.color = "Blue";
    this.price = 50000000;
}

public Car(String model, String color) {
    this.model = model;
    this.color = color;
    this.price = 50000000;
}

public Car(String model, String color, double price) {
    this.model = model;
    this.color = color;
    this.price = price;
}

이러면 코드 중복 ;

public Car(String model) {
    this(model, "Blue", 50000000);
}

public Car(String model, String color) {
    this(model, color, 100000000);
}

public Car(String model, String color, double price) {
    this.model = model;
    this.color = color;
    this.price = price;
}

📌 주의할 점

  • this() 키워드 사용할 때 반드시 생성자의 첫 줄에 작성!
// 오류 발생!!!
public Car(String model) {
    System.out.println("model = " + model);
    this(model, "Blue", 50000000);
}

회고

헷갈리는 내용도 많고 3주차 강의양이 많아서 두차례에 나눠 듣기로 계획을 세웠다.
반도 안들었는데 복잡한 내용이라 머리 아프다.

0개의 댓글