컴공생의 발자취

[내일배움캠프 8일차 TIL] 접근 제어자부터 다형성까지 본문

🤝 활동/스파르타코딩클럽

[내일배움캠프 8일차 TIL] 접근 제어자부터 다형성까지

MNY 2024. 4. 24. 20:54
728x90
반응형
오늘의 진도 : Java 문법 종합반 3주차 완강 후 숙제 진행 중...

오늘도 내가 강의를 들으면서 새롭게 알게된 것 그 동안 애매했던 것을 오늘의 학습으로 정리하려고 한다.
오늘의 학습, 오늘의/어제의 궁금증, 특강, 오늘의 회고 이렇게 4개의 큰 틀로 나누어 정리할 것이다.

 

💡 오늘의 학습 키워드

- 3주차 -
접근 제어자
제어자 사용 주의 사항
Getter & Setter
package & import
상속
클래스 간의 관계
최상위 클래스
super & this
다형성
instance of
추상 클래스
인터페이스
디폴트 메서드 & static & 다형성

 


 

접근 제어자

  • public : 제한X
  • protected : 같은 패키지 내, 다른 패키지의 자손
  • default(기본) : 같은 패키지 내
  • private : 같은 클래스 내

 

  • 클래스 : public, default
  • 메서드 & 멤버변수 : 전부 사용 가능

 

제어자 사용 주의 사항

  • 메서드
    • static, abstract 함께 사용 X
    • private와 final을 같이 사용할 필요 X
  • 클래스 : abstract, final 동시 사용 X
  • abstract 메서드의 접근 제어자가 private일 수 없음

 

Getter & Setter

: 직접적인 값의 조회 방지를 위해 사용
set(또는 get) + 필드 이름(첫 글자 대문자)

  • Getter : private 필드 내보내기
  • Setter : 외부 값 가져와서 변경

 

package & import

  • package : 클래스의 일부분 / 하위 패키지를 도트(.)로 구분
  • import : 컴파일러에게 소스파일에 사용될 클래스의 패키지에 대한 정보 제공

 

상속

부모가 자식에게 물려주는 행위(필드, 메서드)

즉, 부모에게 물려받은 것을 재정의(= 오버라이딩)해서 사용

public class 자식클래스 extends 부모 클래스 {}
  • 오히려 그림으로 표현시 자식 클래스 안에 부모 클래스가 있는 것으로 표현
  • 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다
  • 자바는 다중 상속을 허용하지 않는다!

 

클래스 간의 관계

  • 상속관계 : is - a ("~은 ~(이)다")
  • 포함관계 : has - a ("~은 ~을(를) 가지고 있다")

 

최상위 클래스(final & object)

  • 부모 클래스와 메서드에서 final로 선언하면 최상위 클래스가 되어 자식 클래스에서 사용X (= 오버라이딩 불가)
  • object가 자바에서 최상위 클래스

 

super & this

  • super : 부모 클래스의 멤버 참조 키워드
  • this : 자기 자신을 가리킴

 

다형성

  • 자동타입변환 -> 부모 타입 객체 = 자식 타입 객체 : 부모 타입으로 변환
    # 자식 타입의 멤버, 메서드는 사용 불가능(선언이 안되었기 때문)
  • 강제타입변환
    # 하지만, 자식 타입의 객체로 선언 되었기 때문에 다시 자식 타입으로 돌아가서 자식 타입의 멤버, 메서드 사용할 수 있음

 

instance of

해당 클래스 객체의 원래 클래스명 확인

{대상 객체} instance of {클래스 이름}

 

 

추상 클래스

부모가 완성시키지 못한 클래스를 자식 클래스가 다 받아서 완성시킨다.

public abstract class 추상클래스명 {
    abstract 리턴타입 메서드이름(매개변수, ...);
}
  • 정의만 하고 실행내용이 없다!
  • 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩
  • 같은 이름으로 중복되는데 내용은 다를 때 사용

 

인터페이스

두 객체를 연결하는 다리 역할

  • 상속 관계가 없는 다른 클래스들의 서로 동일한 행위
  • 추상 클래스와 마찬가지로 직접 인스턴스 생성X
  • 인터페이스 간의 상속 가능 extends 키워드 사용
  • 다중 상속 가능
public class 클래스명 implements 인터페이스명 { // 구현
    // 추상 메서드 오버라이딩
    @Override
    public 리턴타입 메서드이름(매개변수, ...) {
        // 실행문
    }
}

public interface 인터페이스명 {} // 선언
  • 모든 멤버변수 : public static final // 생략 가능
  • 모든 베서드 : public abstract // 생략 가능 - static, default 메서드 예외
    # 생략되는 제어자는 컴파일러가 자동으로 추가

코드 + 그림 설명( 아래의 더보기 ..Click )

더보기

* 그림 설명

 

* 예시 코드

public class Main extends D implements C {

    @Override
    public void a() {
        System.out.println("A");
    }

    @Override
    public void b() {
        System.out.println("B");
    }

    @Override
    void d() {
        super.d();
    }

    public static void main(String[] args) {
        Main main = new Main();
        main.a();
        main.b();
        main.d();
    }
}

interface A {
    void a();
}

interface B {
    void b();
}

interface C extends A, B {
}

class D {
    void d() {
        System.out.println("D");
    }
}

 

디폴트 메서드 & static & 다형성

  • 디폴트 메서드 : 기본적인 구현을 제공
    # 접근제어가 public(생략 가능)
  • static : 객체없이 호출 가능
  • 다형성
    • 자동 타입변환 : 인터페이스 변수 = 구현객체;
    • 강제 타입변환 : 구현객체타입 변수 = (구현객체타입) 인터페이스변수;

 


학습방법 특강

기술적 고민을 잘하려면?

  1. 로직과 코드에 대한 의도 생각하기
  2. 구현하는 기술, 스택에 목적과 근거 가지기
  3. 더 좋은 방법이 있는지 고민하기
    # 항상 why? 생각하기

 


오늘의 궁금증

  • Q : 변수나 멤버를 부모 클래스에서 final로 선언한다면?
    • A : 자식 클래스에서 사용 불가능. 만약 자식 클래스에서 해당 변수나 멤버를 다르게 사용하고 싶다면, 새롭게 정의해야 한다.

 

  • 아직 찾아보지 못 한 지난날의 궁금증(더보기 ..Click!)
더보기
  • Q : 참조는 reference인데 자바는 call by value로만 동작하는 것 아닌가?
  • Q : wrapper클래스.. 그래서 무슨 기능들을 가지고 있는데?
  • Q : Object.equals와 str.equals의 차이? // 요건 공식 문서를 찾아봐야겠어..

 

어제의 궁금증

  • Q : 이슈 트레킹이란?
    • A : 개발자, 경영자, 품질관리 테스터 등 프로젝트 참여자들이 위와 같은 업무 진행사항들을 함께 볼 수 있도록 업무를 추적 기록하는 시스템

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

오늘은 또 어제보다 더 집중을 못 한 것 같다.

나의 집중력이 가장 높은 시간은 오전 중인 것 같다. 밥만 먹고나면 식곤증으로 조금 헤이해진다.

그래도 이해가 안되면 그림으로 그려보는 등 나름의 노력을 했다!

 

  • 오늘의 생각

지난 날의 궁금증 중에서 Object.equals와 String.equals가 있었는데

이 둘의 정확한 차이가 뭔지 모르겠다. 블로그를 찾아봐도 equals와 "=="의 차이에 대해서만 나올 뿐이다.

관련 공식 문서를 찾아봐야겠다.

 

목요일, 금요일은 알고리즘과 자료구조 특강을 진행한다고 했는데

가장 많은 관심을 가지고 있는 특강이다! 어떤 내용의 특강을 진행할지 궁금하다!!

 

  • 내일 학습할 것은 무엇인지

3주차를 완강 후 지금 3주차 숙제를 진행 중이다.

3주차 숙제를 진행 후 4주차의 강의를 학습할 계획이다.

그리고 알고리즘 특강도 포함되어있다.

 

728x90
반응형