스터디/혼공학습단

[혼공학습단] 혼공자 9기 2주차

Jop 2023. 1. 15. 20:31
반응형

안녕하세요.

혼공자 2주차 미션 및 개념 정리하러 왔습니다.

이번주차부터 객체지향의 개념에 대해서 들어가니 중요하게 공부해야할 것이 많네요

2주차도 열심히 달려가보겠습니다!

 📄 혼공자 2주차 미션 (진도 Chapter 06 ~ 09)

기본 미션 : p.330 문제 5번 실행 결과 인증화면 캡쳐하기

선택 미션 : 학습 스케쥴 직접 짜고 공유하기

혼자 공부하는 자바 2주차

📄 기본미션 (p.330 문제 5번 실행 결과 인증 화면 캡쳐하기)

5. Parent 클래스를 상속받아 Child 클래스를 다음과 같이 작성했습니다. ChildExample 클래스를 실행했을 때 호출되는 각 클래스의 생성자 순서를 생각하면서 출력 결과를 작성해보세요.

5번 문제 소스코드
실행 결과
문제 설명

정답 출력에 대한 코드 흐름 및 순서를 위의 사진으로 정리해 놓았습니다.

 

1. ChildExmaple Child 선언

우선 ChildExample에서 Child 기본 생성자를 선언합니다.

2. Child 기본 생성자에서 매개변수가 있는 Child 생성자로 이동

Child 기본 기본생성자에서 name 매개변수가 있는 this(name)생성자로 이동합니다.

3. Parent 클래스로 이동

이때 생성자는 super();를 생략하고 있기 때문에 부모 클래스인 Parent 클래스로 이동하게 됩니다.

4. Parent 기본 생성자에서 매개변수가 있는 Parent 생성자로 이동

Parent 클래스 기본생성자 또한 nation 매개변수가 있는 this(nation)생성자로 이동합니다.

5. 출력

매개변수가 있는 Parent 클래스를 기점으로 코드 흐름의 반대 방향으로 돌아가면서 출력합니다.

 

 

📄 선택미션 (객체 지향 프로그래밍의 개념을 정리하기)

객체 지향 프로그래밍 (OOP: Object-Oriented Programming)

객체를 하나씩 조립해서 완성된 프로그래밍을 만드는 기법

 

위키피디아의 정리되어 있는 내용에 따르면,

객체 지향 프로그래밍은 객체들의 모임으로 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있습니다. 

또한 프로그램을 유연하고 변경이 쉽게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용됩니다. 

프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점이 있습니다.

 

https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

객체 지향 프로그래밍 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 객체 지향 프로그래밍(영어: Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목

ko.wikipedia.org

  • 기본 구성 요소 (혼공자 p.223 No.3)

객체 기본 구성 요소

 

1.  field (필드)

: 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳

 

2. constructor (생성자)

: new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당

 

* 기본 생성자

: 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있습니다. 우리가 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 다음과 같이 중괄호 {} 블록 내용이 비어 있는 기본 생성자를 바이트 코드에 자동 추가합니다.

[public] 클래스() {...}

클래스가 public class로 선언되면 기본 생성자에서도 public이 붙지만, 클래스가 public 없이 class로만 선언되면 기본 생성자에도 public이 붙지 않습니다.

 

3. method (메소드)

: 한번 정의 해두고 필요한 곳에서 여러번 사용할 수 있는 함수

메소드 선언

 

📄 내용정리

- Chapter 06 (클래스)

생성자 오버로딩

매개 변수를 달리하는 생성자를 여러개 선언하는 것

생성자의 오버로딩 예시

생성자 오버로딩 시 주의할 점은 매개 변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우에는 오버로딩에 해당되지 않음.

 

메소드 오버로딩

클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것

메소드 오버로딩은 매개 변수의 타입, 개수, 순서 중 하나가 달라야함.

 

- 메소드 오버로딩의 대표적인 예 (System.out.println() 메소드)

void System.out.println(){...}
void System.out.println(int x){...}
void System.out.println(double x){...} 
void System.out.println(string x){...}
void System.out.println(Object x){...}
// etc.

우리가 일반적으로 사용하는 print문에서도 오버로딩의 예제를 찾을 수 있습니다.

위와 같이 System 클래스에 println 메소드를 보면 매개 변수의 타입, 개수가 다르지만 다양한 방법으로 객체를 생성 할 수 있습니다.

 

다른 생성자 호출: this()

생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있습니다. 매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한 생성자에서 이러한 현상을 많이 볼 수 있습니다. 이 경우에는 필드 초기화 내용은 한 생성자에게만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선

생성자 this() 호출 방법

this()는 자신의 다른 생성자를 호출하는 코드로 반드시 생성자의 첫 줄에서만 허용됨.

 

생성자 호출 규약은 3가지가 존재합니다.

1. this, super는 생성자 호출 시 첫 줄에서만 허용된다.

: 생성자가 초기화 되기 이전의 코드들은 JVM보안 규칙 상 인정되지 않으므로 생성자 초기화는 항상 제일 첫째줄에 선언

2. 생성자에서 this와super는 동시에 사용하지마라.

: 초기화는 무조건 한번만 호출되는데 this와super모두 초기화 생성자기 때문에 둘중 하나만 사용해야함.

3. 재귀 생성자 호출

: 재귀 생성자는 나 자신을 호출하는 생성자로 스스로를 계속 호출하기 때문에 stackOverFlow가 발생함.

 

(아래링크에 생성자 호출 규칙에 대해서 정리되어있습니다.😀)

https://www.baeldung.com/java-constructor-specification#rules-of-constructor-invocation

 

싱글톤

전체 프로그램에서 단 하나의 객체만 만들도록 보장

싱글톤을 생성하기 위해서는 외부에서 new 연산자로 생성자를 호출할 수 없도록 private 접근 제한자를 붙여줘야 함.

외부에서 유일하게 객체를 얻는 방법은 getInstance()메소드를 호출하는 방법

 

final 필드

초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 도중에 수정이 불가함

상수

불변의 값을 상수(static final) 원주율 파이 또는 지구의 무게 및 둘레가 해당됨

 

접근 제한자(Access Modifier)

- public 접근 제한자 : 외부 클래스가 사유롭게 사용 가능

- protected 접근 제한자 : 같은 패키지에서는 제한 없이 사용가능, 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스는 사용가능

- private 접근 제한자 : 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체 생성 가능

- default 접근 제한 : 같은 패키지에서는 제한 없이 사용가능, 다른 패키지에서는 불가능

 

- Chapter 07 (상속)

 

메소드 재정의

부모 클래스에게서 상속된 일부 메소드를 자식 클래스에서 다시 수정하는 것

 

메소드 재정의 방법

- 부모의 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 목록)를 가져야 합니다.

- 접근 제한을 더 강하게 재정의할 수 없습니다.

(부모 메소드가 public 접근 제한을 가지고 있을 경우 재정의하는 자식 메소드는 default나 private 접근 제한으로 수정할 수 없음.)

- 새로운 예외(Exception)를 throws할 수 없습니다.

 

싱속할 수 없는 final 클래스

클래스를 선언할 때 final 키워드를 class 앞에 붙이면 이 클래스는 최종적인 클래스이므로 상속할 수 없는 클래스가 됩니다.

즉, final 클래스는 부모 클래스가 될 수 없어 자식 클래스를 만들 수 없다는 것입니다.

 

- final 클래스의 대표적인 예

자바 표준 API에서 제공하는 String 클래스가 대표적인 예

public final class String { ... }

 

부모 생성자 호출 super()

 

부모 생성자 super() 호출 방법

super( 매개값, ... )는 매개값의 타입과 일치하는 부모 생성자를 호출합니다. 만약 매개값의 타입과 일치하는 부모 생성자가 없을 경우 컴파일 에러가 발생합니다.

super( 매개값, ... )가 생략되면 컴파일러에 의해 super()가 자동적으로 추가되기 때문에 부모의 기본 생성자가 존재해야 합니다. 부모 클래스에 기본 생성자가 없고 매개 변수가 있는 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값, ...)를 명시적으로 호출해야 합니다.

 

 

- Chapter 08 (인터페이스)

- Chapter 09 (중첩 클래스와 중첩 인터페이스)

반응형