Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1주차] 임준용 학습 PR 제출합니다. #7

Merged
merged 3 commits into from
Sep 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 0 additions & 30 deletions week01/1주차.md

This file was deleted.

107 changes: 107 additions & 0 deletions week01/임준용.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
## COW SPRING 2기 PRE-ONBOARDING 학습 과제

### 자바의 필수 개념들을 차근차근 살펴보자.

* 자바의 primitive Type과 Reference Type은 어떤 차이가 있나요?

답: 자바에서 Primitive Type(원시타입)은 우리가 흔히 잘 알고 있는 정수형 타입의 int나 byte, short, long, 논리형 타입의 boolean,
문자형 타입의 char, 상수형 타입의 float, double 등이 있다.
Reference Type(참조타입)은 원시타입을 제외한 나머지 모든 타입들로, 우리가 흔히 사용하는 String, array 등을 예로 들 수 있다.

원시타입과 참조타입의 대표적인 차이점은 "데이터가 저장되는 방식"에 있다.
원시타입의 데이터들은 그 데이터의 "실제값"을 스택에 저장한다. 또한 기본값이라는게 있기 때문에 null 상태로 존재할 수 없다.

참조타입은 데이터의 실제값이 아닌 데이터의 값이 저장되어 있는 "주소값"을 힙에 저장한다.
String str = new String("COW"); 라는 문장을 예로 들어보자.
이 문장은 str이라는 변수는 힙 메모리에 저장된 객체인 String 인스턴스 "COW"를 "가리킨다(참조한다)."는 의미라고 볼 수 있다.
또한 참조타입은 null로 존재할 수 있다.


* 자바의 접근 제어자에 대해 설명해주세요.

답: 자바에서는 외부로부터 클래스 그 자체나 클래스 내부의 멤버들에 접근을 제한시키는 역할을 하는 "접근 제어자"가 존재한다.
접근 제어자는 클래스와 클래스 내부 데이터들을 보호하기 위해 사용된다.

접근 제어자의 종류로는 크게 "public", "default", "protected", "private"가 있다.
public은 어떤 클래스든 접근이 접근할 수 있다는 것을 의미한다.
default는 자기자신과 같은 패키지에서만 접근할 수 있다는 것을 의미한다. 만약 접근 제한자를 아무것도 적지 않았다면 자동으로 default접근으로 인식한다.
protected는 자기자신, 같은 패키지, 그리고 다른 패키지에 존재하는 상속받은 자식 클래스에서도 접근할 수 있다는 것을 의미한다.
private은 자기자신만 접근할 수 있다는 것을 의미한다.


* static 키워드에 대해 설명해주세요.

답: 자바에서 static은 "고정적" 이라는 의미이며, static 키워드를 통해 만들어진 변수나 클래스, 메소드들은 메모리의 static영역에 할당된다.
메모리에 할당된 것들은 프로그램이 종료되면 모두 해제된다는 특징이 있다.
이러한 특징때문에 static 키워드를 남발하면 메모리를 많이 차지하기 때문에 프로그램 성능에 영향을 끼칠 수 있다.
또한 static 키워드의 장점으로는 static을 이용하여 변수나 메소드 등을 생성할 경우 객체 인스턴스를 생성할 필요없이 호출할 수 있다는 점이 있다.


* final 키워드에 대해 설명해주세요.
* ++ 상속 관련된 내용도 포함할 것!

답: 자바에서 final 키워드는 그 의미는 "최종"으로, 말그대로 변수 값이나 메소드 등을 변경할 수 없도록 제한시킨다.
변수에서의 final 키워드는 상수(常數)라고도 하며, 변수가 가진 값의 변경을 제한 한다는 의미이다. 이는 값이 변경되면 위험할 경우에 사용된다.
메소드에서의 final 키워드는 메소드의 overriding를 제한 한다는 의미이다. 이는 상속을 받은 다른 클래스에서 부모 클래스로부터 물려 받은 메소드를 변경하지 못하게 할 때 사용된다.
클래스에서의 final 키워드는 클래스의 상속을 제한 한다는 의미이다.
따라서 final 키워드를 이용하여 변수나 메소드, 클래스의 불변을 보장함으로써 코드의 안정성을 높일 수 있다.


* 오버로딩(Overloading)과 오버라이딩(Overriding)에 대해 설명해주세요.

답: 자바에서 오버로딩이란 한 클래스 내에 메소드가 존재할 때, 같은 클래스 내에 파라미터의 개수나 자료형이 다르지만 같은 이름의 메소드를 생성할 수 있게 하는 것이다.
오버라이딩이란 부모 클래스에서 상속 받은 메소드를 자식 메소드 내에서 재정의할 수 있게 하는 것이다.

이 둘의 차이점으로,
첫번째, 오버로딩은 같은 클래스 내에서 적용되며, 오버라이딩은 부모와 자식 클래스 간의 상속관계에서 적용된다.
두번째, 오버로딩은 메소드의 리턴값은 동일해도 되지만, 파라미터는 동일하면 안된다. 오버라이딩은 둘 다 동일해야한다.


* 추상 클래스와 인터페이스는 각각 무엇이고, 어떤 차이를 가지는지 설명해주세요
* 반드시 추상 클래스와 인터페이스의 사용 목적을 명시해주세요.

답: 추상 클래스란 쉽게 말해 "구체적이지 않은 클래스"을 의미한다. 추상 클래스는 부모 클래스에서 구현되지 않은 "추상 메소드"를 정의한 다음(구현된 메소드도 존재 가능)
부모 클래스를 상속받은 자식 클래스에서 해당 추상 메소드를 구현하게 만든다. 재밌는 점은 만약 해당 상속받은 추상 메소드를 구현하지 않으면 해당 클래스도 추상 클래스가 된다.
추상 클래스의 사용 목적은 상속과 메소드의 구현을 강제하고 비슷한 기능을 하는 클래스들을 묶음에 있다.

인터페이스는 흔히들 추상 클래스 보다도 더 추상적인 클래스라고 하는데, 인터페이스 안의 모든 메소드들은 추상 메소드이다.
인터페이스로부터 메소드를 상속받은 자식 클래스들은 모두 해당 메소드들을 재정의해야 하기 때문에 다형성을 보장한다는 특징이 있다.
또한 인터페이스 내부의 변수들은 모두 final(상수)로만 선언해야한다.
인터페이스의 사용 목적은 추상 메소드를 통해 여러 다른 기능을 하는 클래스들을 묶어 다형적인 구현을 하는데에 있다.

추상 클래스와 인터페이스의 차이으로는,
첫번째, 추상 클래스는 다중 상속이 불가능하나 인터페이스는 가능하다.
두번째, 추상 클래스는 추상 메소드가 있어도 되고 없어도 무방하다, 하지만 인터페이스는 모든 메소드가 추상 메소드이다.
세번째, 추상 클래스에서 변수 선언 시 상수를 사용하든 안하든 상관없다, 하지만 인터페이스는 모든 변수를 상수로 선언해야한다.


* Java Enum에 대해 설명해주세요.
답: 자바에서 Enum은 열거타입으로 변수를 선언할 때 사용하는 키워드이다.
우리는 final 키워드를 이용해서 특정 값만 지정할 수 있도록 상수를 선언해왔다.
하지만 상수 선언을 여러번 남발하여 코드를 짜게 되면 가독성도 떨어질 뿐더러 문제를 발생시킬 수도 있기에, 이러한 문제를 방지하고자 Enum을 사용한다.
Enum은 마치 상수를 클래스화를 시켜 사용하는 것으로, 여러 상수들을 묶어 특정 값만 불러올 수 있도록해준다.


* 객체지향이란 무엇일까요? 객체지향을 지키면 어떤 이점을 얻을 수 있나요?
답: 먼저 객체란 쉽게 말해 우리 주변에 있는 모든 것이라고 말할 수 있다.
객체들은 각자 자신의 상태에 따라 행동하며, 다른 객체와도 상호작용하며 존재한다.
객체란 현실에 존재하는 개념이고, 이를 현실이 아닌 곳에 접목시키기를 원한다는(지향) 의미를 지니는 것이 객체지향이라고 볼 수 있다.
이러한 개념은 프로그래밍에도 접목시킬 수 있다.
객체지향 프로그래밍에서 객체지향을 지킴으로써 상태(필드)와 행동(메소드)로 이루어진 각 독립된 객체들이 상호작용하며 효율적이고 유기적인 프로그래밍이 가능해졌다.


* 자바 객체지향의 4대 특성에 대해 각각 설명해주세요.
답: 자바 객체지향의 4대 특성으로 크게 "상속", "다형성", "추상화", "캡슐화"가 있다.

상속이란, 기존의 한 상위 클래스을 통해 하위 클래스를 작성할 수 있다는 자바의 특징이다. 상속의 이용 목적은 클래스 간에 공유하는 기능이나 특성들을 반복적으로 정의할 필요없이
재사용하여 코드의 중복을 최대한 줄이고자 함에 있다.

다형성이란, 독립성을 가지는 객체의 특성이나 기능에 따라 코드의 성질도 다양해지는 자바의 특징이다.
같은 이름이지만 내부는 다른 클래스를 생성하는 오버로딩과 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 오버라이딩의 대표적인 사례이다.

추상화란, 실제로 존재하는 객체들을 이용하여 프로그래밍을 할 때, 객체 간의 불필요한 요소들은 모두 제거하고 공통된 속성과 기능을 추출하여 재정의하는 자바의 특징이다.
추상 클래스와 인터페이스가 대표적인 사례이다.

캡슐화란, 한 클래스가 가진 연관된 필드와 메소드를 하나의 캡슐처럼 묶어서 내부 데이터들을 외부로부터 보호하는 자바의 특징이다.
접근 제어자를 이용하여 외부 클래스에서 접근하는 것을 제한하는 것이 대표적인 사례이다.

Loading