3주차 강의를 들으며 (클래스, 상속, 인터페이스 내용) 메모장에 정리해둔 메모 모음집입니다. 중요한 키워드 위주입니다.
리펙토링 : 리펙토링(Refactoring)은 기존의 코드 기능은 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정을 뜻한다. 이는 중복을 제거하고, 복잡성을 줄이며, 이해하기 쉬운 코드로 만들기 위해 수행된다. 리펙토링은 버그를 줄이고, 프로그램의 성능을 향상시킬 수도 있으며, 코드의 설계를 개선하는 데에도 도움이 된다. 쉽게 이야기해서 작동하는 기능은 똑같은데, 코드를 개선하는 것을 리펙토링이라 한다.
속성(필드), 메서드(행위)
Java에서는 이러한 속성과 행위를 필드와 메서드로 정의하여 구현할 수 있습니다.
객체지향 프로그래밍의 특징
객체지향 프로그래밍을 하다 보면 필연적으로 만나게 되는 개념이 있습니다.
바로 캡슐화, 상속, 다형성, 추상화입니다.
캡슐화는 보완에서 중요!

🍄 상속에서 중요한 개념 3문장!
1. 모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있다.
2. 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.
3. 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.
객체를 만들기 위해서는 설계도에 해당하는 클래스가 필요
객체는 실체이고 클래스(설계도)는 실체는 아님
결론
'Class 클래스_이름' <- 이게 객체를 만들기위한 설계도다!
클래스는 실체가 아니다. 클래스는 설계도
그걸 인스턴스화 시켜야지 객체에서 사용할 수 있는겨
한 객체에서 하위객체를 가지고 있을 수 있다
티이어, 핸들,,
메서드 == 함수라고 생각해도 돼
오버로딩
메서드의 이름이 같고, 매개변수의 개수 or 타입 or 순서가 달라야 합니다.
오버로딩은 매개변수의 차이로만 구현할 수 있습니다.
자바 안에서 상수 = static final (공용이고 수정이 안되는)
상수는 대문자로 작성하는 것이 관례 COMPANY
Getter 와 Setter
직접적인 값의 조회나 세팅 방지하기 위해서 Getter 와 Setter를 쓴다.
한 부모 클래스가 여러 자식클래스 가능
한 자식 클래스가 여러 부모 클래스 불가능 (다중상속 X)
자식 클래스 생성자 이렇게 가능
Mammal mammal = new Whale();
부모 Mammal 자식 Whale
// mammal.swimming(); // 오류 발생
// 즉, 부모 클래스에 swimming이 선언되어있지 않아서 사용 불가능.
Swimming 메서드는 Whale(자식클래스)에 있음
// Whale whale = new Mammal();// 오류 발생
즉 Mammal mammal = new Whale(); 이렇게 생성했어도 그 생성한 결과물의 형태는(객체)는 Mammal이다.
자동형변환 됐던 애들만 강제 형변환(부모 -> 자식)으로 돌아갈수 있는것.
강제형변환 그냥은 안됨
자식의 메서드를 사용하고 싶을 때
Whale whale = (Whale) mammal;
그래서 굉장히 기능이 제한적 -> 많이 활용 x
추상클래스 (실무에선 그렇게 많이 안쓰임, 인터페이스가 너무너무너무 중요)
부모는 완성시키지 않은 메소드를 가지고있어!
근데 자식이 상속받아서 그걸 완성시켜서 쓰는!
상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다.
이렇게 메모를 해두었는데, 사실 객체지향 프로그래밍 개념 자체가 익숙하지 않아서 강의 듣고 숙제하기 전 깜지를 좀 썼다. 그래서 큰 개념들은 이해가 됐는데 인터페이스 파트만 아직 잘 이해가 안 되서 강의를 한번 더 봐야겠다. 추상 클래스의 추상메서드도 자식 클래스에서 반드시 오버라이딩 되어야 하고, 인터페이스의 추상 메서드도 반드시 오버라이딩되어야 한다고 메모해놨는데 둘 다 맞는 것인지 다시 확인을 해봐야겠다. 바아로 내일 TIL은 인터페이스 복습이다!