[24.04.24] 내일배움캠프 8일차 JAVA TIL - 객체지향 프로그래밍

2024. 4. 24. 20:30T.I.L

오늘 한 일

  • 오후 2시 학습법 특강
  • 3주차 강의 수강
  • 3주차 HW 완성하기...는 아직 하는중 

 


수기를 남기기에 앞서 교육 내용이 많아, 평소 헷갈렸던 개념 위주로 T.I.L을 작성했다.

 

외부 접근 과 내부 접근

외부 접근 : 클래스 밖에서 변수에 직접 접근

(예시 코드 넣기)

내부 접근 : 내부의 메소드를 사용하여 간접 접근

(예시 코드 넣기)

 

인스턴스 멤버 / 클래스 멤버

멤버 = 필드 + 메소드

인스턴스와 클래스는 선언하는 방법으로 분류된다

 

static (고정) : 인스턴스 없이 바로 사용할 수 있음

static 함수를 사용하기 위해서는 해당 변수도 static형태로 선언해주어야 한다.

static final : 공용적이고 수정이 안되는 변수/함수

 

 

this와 this()

public car(String name,String color){
    model = name;
    this.color = color;
}

 

오버로된 자기자신의 이름과 같은 함수가 실행되도록 this() 함수 실행

public car(String model){
    this(model,"red",50000);
}
public car(String model,String color){
    this(model,color,50000);
}
public car(String model,String color,double price){
    this.model = model;
    this.color = color;
    this.price = price;
}

 

 


생성자

만약 사용자가 임의로 생성자를 1개라도 만들어 뒀다면 기본 생성자는 생성되지 않는다.

매개변수의 개수를 달리하여  같은 함수를 재생성 하면

// 오버로딩
public car(){
    // 기본 생성자 : 생략 가능
    System.out.println("생성자 호출");
}

public car(String name){
    model = name;
}

public car(String name,String color){
    model = name;
    color = color;
}

형태로 쓰일 수 있고, 각 함수에 따라 다른 기능을 수행한다.

 

생성자의 접근 제어자

- 생성자의 접근 제어자와 클래스의 접근 제어자는 일치 시킨다.

 

Getter와  Setter 

: 직접적인 값의 조회, 세팅을 방지하기 위해 사용하는 method

private int score;

//getter
public int getscore(){
    return score;
}

//setter
public void setscore(int score){
    this.score = score;
}

 

객체의 무결성을 위해 접근 제어자를 사용

제어자 사용시 주의 사항
abstract 는 static, final과 사용할 수 없다.
접근 제어자가 private일 수 없다.
private와 final은 같이 사용될 수 없다.

3-10 import와 package 

다른 패키지에 있는 함수를 import나 직접 경로 참조를 통해 가져와 사용할 수 있다.

super과 super()

부모 키워드에 접근하는 것. this는 자기 자신 참조, super은 부모 참조로 이해하면 된다.

 

다형성

package poly;

public class Main {
    public static void main(String[] args) {
        // 매개변수 다형성 확인!
        Car car1 = new Car(new KiaTire("KIA"));
        Car car2 = new Car(new HankookTire("HANKOOK"));

        // 반환타입 다형성 확인!
        Tire hankookTire = car1.getHankookTire();
        KiaTire kiaTire = (KiaTire) car2.getKiaTire();

        // 오버라이딩된 메서드 호출
        car1.tire.rideComfort(); // KIA 타이어 승차감은 60
        car2.tire.rideComfort(); // HANKOOK 타이어 승차감은 100
    }
}

Tire은 부모 클래스 KiaTire, HankookTire은 자식 클래스이다.

자식 클래스 -> 부모 클래스 형변환은 가능하지만 (기능을 축소하면 되므로 가능)

부모 클래스  -> 자식 클래스 형변환은 불가능하다 (이미 선언된 형태에서 기능이 확장 되어야 하므로 불가)


추상화

추상 클래스는 미완성된 클래스로, 상속을 통해 자식들의 입맛에 따라 다르게 만든다.

기본적인 틀은 미리 만들어두고, 자식 클래스를 통해 기능을 완성해나간다.

 

인터페이스  (난이도 : ★ ★ ★ ★ ★)

: 추상클래스와 비슷하게 interface 명령어로 추가할 수 있음. 원할때 리모컨으로 전환하듯 기능을 바꿀 수 있음

인터페이스는 다중 상속이 가능하다.

extends D implements C : D를 상속받음, C의 인터페이스를 사용한다. 

인터페이스 간의 상속은 extends를 사용한다. (다중 상속 가능)

인터페이스 - 클래스 는 implements 사용

인터페이스의 모든 method는 추상 클래스로 구성됨. 일부만 추상으로 구현하고 싶을 시,

interface가 아닌 abstract 사용

default method : 추상 메소드의 기본적인 구현을 제공하는 메소드로 interface안에서도 기능을 구현할 수 있다!

 

 

 


 

 

 

TMI

내배캠이랑 별개로 파이썬으로 알고리즘 공부중인데 eval이라는 함수의 존재를 알게 됐다..

 

오늘의 학습법 특강 액기스 : Not Coder, Be Developer

4개월간 죽어라 노력하자 못해도 된다 노력하자!