본문 바로가기
Today I Learned 2024. 4. 1.

(24.04.01) Java의 정석 학습(객체지향 프로그래밍_오버로딩, 생성자, 변수초기화, 상속, Super)

월요일인데 저번주에 세웠던 계획을 좀 수정을 해야될것 같다.

일단 2주간 미니 팀 프로젝트가 드랍이 됬고,

그리고 주말에 문제를 좀 들여다봤는데, 저번주의 지네릭스부터 시작해서 가장 기본적인 코드를 이해해야지 진행이 될 듯 싶어.. Java의 정석 교재 보면서 이론에 좀더 집중을 하기로 했다.

다시 세운 계획은 

  • 미니프로젝트 계속 준비하기
    • 여유있을 때  git 이해
  • Java의 정석 공부
    • 장기적으로 5~7일 이내에 Java 코드 용어들이 무엇인지, 이해할 정도로

Java의 정석 학습 간단 정리

  공부한 양이 좀 되어서 자세한 실습, 나만의 외우기 코멘트 양은 책의 내용도 많이 참고가 되어 저작권상 Notion에 정리!

객체지향 프로그래밍에 관하여 학습하고 있는데 특히 계층에 관한 개념과 상속에 따른 관계 this, super 처럼 자신이나 조상 클래스의 인스턴스를 변수를 사용하고 활용하는 것을 강조하고 있다.

  이는 효율성있게, 코드들을 누가 봐도 쉽게 이해하고, 쉽게 수정이 가능하고, 코드가 의미하는 바를 중첩하지 않도록 하는 것에 목적을 두고 있는 객체지향성임을 알 수 있다.

  C++ 등의 언어에서는 가능한 다중상속이 Java에서는 허용하지 않고 단일 상속만을 허용하고, 자식과 부모 / 자손과 조상에서 상속된 모든 것에 대하여 자손에서 오버라이드를 하거나 생성자일 경우 무조건 super을 사용하게 하여서 정확히 클래스가 어떤 생성자를 가지고 어떻게 인스턴스를 생성할것인가에 명확성을 요구하고 있음을 알 수 있다.

  효율있게 코드를 짜기위해서는 역시 전체적인 Java 코드의 흐름을 이해해야할 것이고.. 그러면 당연히 Java 이론이 필요할 것이라고 생각해서 다시 java 정석 학습을 시작하기로 했다. 

더보기

오버로딩 overloading

  • 매개변수의 개수, 타입 등으로 달라 한 클래스에서 같은 이름을 가진 메서드를 정의

가변인자 verargs & 오버로딩

  • JDK1.5 부터 메서드 매개변수의 개수가 고정이 아니라 동적으로 지정이 가능, 이러한 기능

 

생성자 Constructor& this() this

this this()

  • 생성자에서만 클래스 이름 대신에 사용
  • this : 인스턴스 자신을 가리키는 참조변수
  • this() this(매개변수) : 같은 클래스의 다른 생성자를 호출 할 때 사용  

 

생성자를 활용한 클래스 인스턴스 복사

 

변수 초기화

초기화 블럭 initialization block

클래스 초기화 블럭

  • 로드될때 딱 한번 실행

인스턴스 초기화 블럭

  • 인스턴스변수의 복잡한 초기화

초기화 시기 및 순서

 

상속 inheritance

  • extends 를 사용해서 자손 클래스에 조상 클래스가 상속
  • 조상 클래스 : 부모 parent클래스, 상위 upper 클래스, 기반 base 클래스
  • 자손 클래스 : 자식 child 클래스, 하위 sub 클래스, 파생 derived 클래스

vs 포함관계 composite

  • 효율을 위해서 new 를 사용해서 클래스 안에 새로운 관계를 형성

단일 상속 single inheritance

  • 상속을 해줄 클래스들안에 중복된 메서드간 있다면 이것을 구분할 수 없기 때문에

Object클래스

  • 모든 클래스의 상속 계층도의 최상위 조상 클래스

 

Super Super()

Super

  • 자손 클래스에서 조상 클래스에서 상속받은 멤버를 참조하는 참조변수

Super()

  • 조상 클래스의 생성자를 호출하는데 사용, 호출 되어야만 함
  • 자손 클래스 멤버가 조상 클래스 멤버를 사용할 수 있기 때문에 조상 멤버들의 초기화가 필요하기 때문

 


미니 프로젝트가 아주 간단한 어떤 내용을 만들어 내는 것인가 인데 아이디어가 떠오르지않아

팀원들과 얘기를 많이 해야겠지만

일단은 좀만 더 아침 일찍 시작을 하고, 그리고 프로젝트 진행 시간을 따로 갖는 것도 나쁘지 않을 것으로 보인다.

+

 Java의 정석학습 속도를 내일 까지 파악을해서 다음주 금요일 이전까지는 모두 끝낼 수 있도록 해야할듯...