강의 복습_클래스, 다형성, 인터페이스, 디폴트메서드

김재현·2023년 11월 11일
0

TIL

목록 보기
28/88
post-thumbnail

즐거운 주말!

개발자 형님의 가족과 함께 식사하고, 알고리즘 문제 풀 때 옆에서 코칭도 받았다.

아가가 너무 귀여웠다... 자주 놀러오면 좋겠다.

알고리즘

1. 이상한 문자열 만들기
2. 삼총사

자바 강의 복습

내가 무얼 알고 무엇을 모르는지 확실히 파악되지 않았고,
개념이 튼실하게 잡혀있어야 한다고 생각하여 주말을 활용하여 자바 강의자료를 복습해보며 정리했다.
모르거나 아 그래서 그랬구나! 라고 생각했던 것들만 정리하니 내가 그래도 성장을 하긴 했구나... 라는게 느껴진다.

자바 강의자료 1주차

자바의 원리를 '이것이 자바다'를 통해 더 학습해볼 것.

자바 강의자료 2주차

continue 명령이 있다는걸 기억해놓자..! 알고리즘 할 때 사용.

• List : ArrayList, LinkedList  (List=Interface, ArrayList=Class)
• Stack
• Queue
• Set: HashSet, TreeSet, LinkedHashSet
• Map: HashMap(중복x, 순서x, key값 null O), TreeMap(key값 기준으로 오름차순정렬)

자바 강의자료 3주차

클래스=필드+생성자+메서드

클래스 멤버로 만들기 위해서는 static 키워드!

객체가 인스턴스화 할 때마다 객체의 메서드들은 인스턴스에 포함되어 매번 생성이 될까요?
- 그렇지 않습니다. 매번 저장한다면 중복 저장으로 인해 메모리 효율이 매우 떨어지기 때문에 메서드는 메서드 영역에 두고서 모든 인스턴스들이 공유해서 사용합니다.
- 대신 무조건 객체를 생성 즉, 인스턴스를 통해서만 메서드가 사용될 수 있도록 제한을 걸어둔 것입니다.
아하 이래서 생성자 호출로 객체가 없어도..!!!

• 지역변수 : 메서드 내부에 선언한 변수를 의미 (메서드 종료시 사라짐)
• final : 일반적으로 상수는 대문자로 작성하는 것이 관례. (static+final 로도 많이 사용됨)
• this: 객체 즉, 인스턴스 자신을 표현하는 키워드 (객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해 사용)
• this(…): 객체 즉, 인스턴스 자신의 생성자를 호출하는 키워드 (객체 내부 생성자 및 메서드에서 해당 객체의 생성자를 호출하기 위해 사용)
-> this() 로 다른 생성자를 호출할 때: 해당 생성자의 첫 줄에 작성되어야 함.

  • final 클래스: 상속 할 수 없는 클래스가 됨
  • final 메서드: 오버라이딩 불가
  • Object 클래스는 Java 내 모든 클래스들의 최상위 부모 클래스

2. 접근제어자 좁은 범위 안되는 이유: 다형성을 생각해보라. 메소드를 더 좁은 범위로 오버라이딩 한다면 클라이언트는 상속받은 클래스를 반환 받을 땐 해당 메소드를 호출하지 못함. 반면에 부모 클래스를 반환받으면 호출 가능해지는 기이한 현상이 발생함.

  • super : 부모 클래스의 멤버를 참조할 수 있는 키워드 (객체 내부 생성자 및 메서드에서 부모 클래스의 멤버에 접근하기 위해 사용)
  • super(…) : 부모 클래스의 생성자를 호출할 수 있는 키워드 (객체 내부 생성자 및 메서드에서 해당 객체의 부모 클래스의 생성자를 호출하기 위해 사용), 이것도 가장 첫줄에 호출.

다형성

  • 부모타입 변수 = 자식타입객체; : 자동으로 부모타입으로 변환 -> 부모에 없는 자식 메서드 사용 불가. 단, 메서드 호출시 오버라이딩 된 자식의 메서드가 호출됨.
  • 자식타입객체가 부모타입으로 자동 타입변환된 후 다시 자식타입으로 변환될 때 만 강제 타입변환이 가능
    (부모타입 변수로는 자식타입객체의 고유한 멤버를 사용할 수 없기 때문에 사용이 필요한 경우가 생겼을 때 강제 타입변환을 사용)

  • 추상 클래스: 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 함 (@Override) -> 하나일때는 생략된댓나?? 아무튼 생략 가능하지만 명시적으로 작성하는게 좋음.

인터페이스

이게 들어가 있다는 것만 알아두자! 다들 생략해서 쓰니....

  • 인터페이스에서는 static 메서드 선언이 가능함.
  • 인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 한다.
    (만약 인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경)
  • 인터페이스는 implements 키워드로 상속받지만, interface끼리는 extends!
  • 인터페이스는 다중 상속 가능

디폴트메서드 [모던 자바]

인터페이스의 모든 method는 public abstract이기 때문에, 인터페이스에 메서드를 추가하려면, 구현하는 모든 클래스에서 해당 메서드를 구현하는 코드를 일일이 다 써줘야한다.
이걸 해결하여 인터페이스에 자유롭게 새로운 메서드를 추가하고자 만들었음.

profile
I live in Seoul, Korea, Handsome

0개의 댓글