패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기

비기너반 강의 복습 3 | 생성자, 초기화, 메소드, 오버라이딩 vs 오버로딩, 어노테이션과 컴파일러, JDK와 JAR

Tech_JINI 2025. 1. 20. 18:35

Q 생성자는 메소드인가 아닌가

메소드인지 아닌지에 대해서는 아직 정해진 바가 없다. 학계에서 의견대립이 있는 소재이다.  

-       ('메소드이다'의 주장) 기존 메소드와 사용법과 형태가 비슷하다.

-       ('메소드가 아니다'의 주장) 반환타입(return) 이 없다. / 클래스를 초기화시키는 특별한 역할을 가지고 있다. 

 

 

초기화

처음 값을 지정할 때 쓰는 말 + 원래 상태로 돌린다.

=> “시작할 수 있다

 

Class Person {

          String name;

          Person(String name..

 

New Person(“jini”) = 객체를 초기화한다. = 객체를 사용할 준비가 됨.

= 객체 생성 ! = 객체 생성 후 메모리에 올린다.

 

) 변수를 초기화한다. 상태 초기화, 공장 초기화 ,,,,

 

 

 

Q 생성자는 오버라이딩이 되는가

오버라이딩

: 부모의 메소드를 자식 클래스에 맞게 덮어쓰기

 

 메소드

: 사용할 수 있는 기능을 써놓은 설명서, 선언부와 구현부로 구성되어 있고 { }안에 문장들을 실행해주는 블록이다.

 

[메소드의 기본형태]

접근제어자 반환타입 이름 (매개변수) { // K&R방식이 표준

          ~~

}

 

1.     (메소드) 접근 제어자

-       public: 프로젝트 내부에서 제한이 없다.

-       protected: 다른 패키지의 자손까지 접근 가능

-       default: 같은 패키지

-       private: 같은 클래스 (feat. 지역 변수)

 

2.     반환 타입 종류 : 기본형, 무제한 cf. 참조형

 

 

 

오버로딩/오버라이딩

생성자’는 오버로딩의 유래를 담고 있다.

 

Class Person {

          String name;

          Int age;

          String phoneNum;

          키, 몸무게, 성격, 국적, 주민번호, MBTI, 성별, 핸드폰번호…

 

Person(String name, int age){

          this.name = name; //this: 클래스, iv

          this.age = age;

          }

 

Person(String name, int age, String phoneNum){

          this.name = name; //this: 클래스, iv

          this.age = age;

          this.phoneNum = phoneNum;

          }

}

 

 

생성자의 매개변수로 클래스변수와 같은 이름을 쓰더라도 키워드 this를 쓰는 이유는 뜻을 추측하고, 지역변수와 구분하기 위해서이다.

 

 

오버라이딩 

Class Parent {

          Public void method() {

                    System.out.println(“parent”);

          }

}

 

Class Child extends Parent {

          Public void method(){ //오버라이딩 >>오류

                    System.out.println(“child”);

          }

          Public void method(String str){ //오버로딩

                    System.out.println(str);

          }

 

          Public String method() { >> 오류

                    Return ”hoho”;

          }

}

>> 오류가 난 이유 : 반환타입을 맞추지 않은 오버라이딩이 있기 때문에 오류가 나왔다.

오버라이딩을 하기 위해서는 반환타입까지 맞춰줘야 한다.

 

 

Q 반환타입은 오버라이딩에 영향이 있나? : 부모와 반환타입이 같아야 한다.

Q 반환타입은 오버로딩에 영향이 있나? : 오버로딩은 반환타입 달라도 잘 출력된다.

 

 

매개변수 개수와 타입의 차이: 메소드 호출 시, 어떤 메소드를 사용할 지 명확하게 구분하기 위한 것

 

 

@Override

public class OverrideDemo {

public static void main(String[] args) {

Child child = new Child(); child.method();

}

}

class Parent {

public void method() {

System.out.println("parent");

}

}

class Child extends Parent {

@Override // 컴파일러한테 '나, 아래 메소드 오버라이드할 건데.. 문법 체크 좀 해줄래?'하는 것

public void method() {

System.out.println("child");

}

}

 

 

@override 를 앞에 적으면 선언부 일치여부를 확인해준다.

-       컴파일러가 메소드 오버라이드의 문법체크를 해준다.

 

@를 컴파일러가 인식한다. 라이브러리이다.

-       어노테이션/애노테이션

-       어노테이션을 누군가가 구현해놨기 때문에 우리가 사용할 수 있는 것이다. -> 라이브러리

-       영향력은 바로 밑에 있는 것까지이다.

 

JDK가 하는 일

Jar파일 : java archive root

 

표준(기본) 라이브러리

-       프로젝트 생성할 때 기본적으로 필요한 내가 직접 짜지 않은 코드들

-       기본적인 어노테이션은 표준 라이브러리에 내장되어 있다.

 

Cmd+클릭: 어떤 코드가 어디에 있는지 볼 수 있다. 참고용으로 한번씩 보기