[F-Lab 모각코 챌린지 7일차]

부추·2023년 6월 7일
0

F-Lab 모각코 챌린지

목록 보기
7/66

TIL

  1. 알고리즘 : 두 큐 합 같게 만들기 (덱 풀이)
  2. 멘토링 대비 자바의 신 '정리해 봅시다' 문제 풀이 (1~12장)

1. 두 큐 합 같게 만들기

길이가 같은 두 큐 queue1, queue2가 주어진다. 한 쪽의 큐를 pop해서 다른 쪽의 큐에 push하는 것을 한 번의 작업으로 간주했을 때, 두 큐의 합을 같게 만들기 위한 최소 작업 수를 구해야하는 문제다.

deque를 이용해 단순 구현으로 풀었다. 다른 사람들의 풀이를 살펴보니 투포인터로 꽤나 해결했더라.

가장 아리까리 했던 것은, 최대 작업수(코드에선 max_count 변수)를 어느 정도로 설정해야하냐? 였다. 처음엔 단순히 len(queue1)*2로, 양 쪽 큐의 모든 원소가 pop/push되는 경우가 최대일 거라 생각해서 이렇게 설정했는데 틀렸다.

큐의 한 쪽에 극단적으로 큰 값이 몰려있을 때 (최대 길이 값 * 2 + 2) 까지 작업이 이뤄질 수 있다는 것까진 이해했는데, 이를 수학적으로 증명해내진 못하겠다..

정답 처리된 deque 구현 코드이다.

from collections import deque
def solution(queue1, queue2):
    sum1,sum2 = sum(queue1),sum(queue2)
    if (sum1+sum2)%2==1:
        return -1
    
    count,max_count = 0,len(queue1)*2+2
    queue1,queue2 = deque(queue1),deque(queue2)
    while (count <= max_count):
        if (sum1>sum2):
            # 1->2
            popped = queue1.popleft()
            queue2.append(popped)
            sum1 -= popped
            sum2 += popped
        elif (sum1<sum2):
            # 2->1
            popped = queue2.popleft()
            queue1.append(popped)
            sum2 -= popped
            sum1 += popped
        else:
            return count
        count += 1
    return -1
  • sum은 최초에 한 번씩만 계산하고, 작업이 이뤄질 때 sum1sum2에 pop된 원소를 빼고 더하는 식으로 구현했다.
  • 큐의 합이 홀수이면 계산을 시작할 필요도 없이 -1이 답이다.
  • max_count가 될 때까지 sum1==sum2 조건을 만족하지 못하면 -1을 반환하도록 했다.




2. 자바의 신 연습문제

1장 : 프로그래밍이란 무엇인가?

1) 클래스가 뭔가요?

자바의 클래스는 객체의 설계도이다. 객체 지향 프로그래밍에선 현실세계의 객체를 도메인 관심사에 맞게 적절히 추상화시켜 클래스로 제작한다. 클래스엔 객체가 가질 수 있는 상태값인 변수, 객체가 할 수 있는 일을 정의한 메소드가 존재한다.

2) 메소드가 뭔가요?

메소드는 객체가 할 수 있는 행위를 정의하는 자바의 함수이다. 접근 제어자, 반환 타입, 메소드 이름, 매개 변수(와 그 타입), 그리고 일련의 로직을 수행하는 몸체로 이루어져있다.

3) 메소드의 매개변수는 어디에 적어주나요?

int add(int a, int b)처럼 괄호 안에 적는다.

4) 메소드 이름 앞에 꼭 적어줘야 하는 건 뭐죠?

메소드의 반환 타입이다. 메소드가 정의된 로직을 수행한 후 일정 값을 반환할 때가 있는데, 이 반환값의 타입을 메소드 시그니처로서 미리 정해줘야 한다. 반환값이 없는 메소드의 경우 반환 타입은 void가 된다.

5) 클래스가 갖고 있어야 한다고 한 두 가지가 뭐죠?

상태값(클래스 변수, 멤버 변수)과 메소드이다.

6) 메소드에서 결과를 돌려주려면 어떤 예약어를 사용해야 하나요?

return


2장 : Hello God Of Java

1) main() 메소드의 메소드 이름 앞에는 어떤 예약어가 들어가나요?

public static void

2) main() 메소드의 매개 변수에는 어떤 값이 들어가나요?

String[] args. java 명령어로 프로그램 실행 시에 뒤에 주어진 매개변수들이 바인딩된다. args[0]은 자바 프로그램 이름이다.

3) 만약 여러분들이 만든 클래스에 main()메소드가 없다면, java 명령어로 그 클래스를 수행할 수 있나요?

main()메소드가 엔트리 포인트이기 때문에 불가능하다. 실행 목적으로 구성한 클래스 파일이라면, main()메소드는 반드시 존재해야 한다.

4) System.out.println() 메소드는 어떤 용도로 사용하나요?

자바에서 무언가를 출력할 일이 있을 때 사용한다. 매개 변수로 주어진 문자열을 콘솔에 출력해주는 역할을 한다.

5) System.out.println() 메소드는 System.out.print() 메소드와 어떤 차이가 있나요?

전자는 출력 후 줄바꿈이 일어나지만, 후자는 그렇지 않다.

6) // 는 무엇을 하는데 사용되는 기호인가요?

주석. 코드가 아닌 부가 설명을 달 때 이용한다.

7) /* 로 시작하고, */로 끝나는 사이에 있는 소스들은 어떻게 되나요?

주석처리된다.

8) 메소드를 선언할 때 반드시 꼭 있어야 하는 세 가지는 무엇인가요?

반환 타입, 메소드 이름, 그리고 {} 내부의 몸체.


3장 : 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요

1) 클래스와 객체의 차이점을 말해 주세요.

클래스는 객체의 설계도, 객체는 설계도에 따라 만들어진 실제 물체로 설명할 수 있다. 클래스는 '이 클래스의 객체는 이러한 변수와 이러한 메소드를 가져요' 하고 class로서 정의하면, 객체는 new키워드를 통해 실제로 만들어진 그 인스턴스인 것이다.

2) 객체를 생성하기 위해서 꼭 사용해야 하는 예약어는 뭐라고 했죠?

new

3) 객체를 생성하기 위해서 사용하는 메소드 같이 생긴 클래스 이름에 소괄호가 있는 것을 뭐라고 하나요?

생성자(constructor)

4) 객체의 메소드를 사용하려면 어떤 기호를 객체 이름과 메소드 이름 사이에 넣어주어야 하나요?

.

5) 여러분들이 메소드를 사용하기 위해서는 어떤 것을 만들어야 하나요?

메소드가 static이 아닌 이상 객체를 생성해야 객체의 메소드를 사용할 수 있다.

6) 5번 문제에서 만들어야 하는 것은 어떤 예약어를 사용하고, 클래스의 무엇을 사용해야 하나요?

new 예약어를 통해 클래스의 생성자를 사용해야 한다.


4장 : 정보를 어디에 넣고 싶은데

1) 네 가지 종류의 변수는 어떻게 구분할 수 있나요?

  • 인스턴스 변수 : 클래스 내부에 선언된 필드값. 생성된 객체마다 다른 값을 가지고, 객체와 생명 주기를 함께한다.
  • 클래스 변수 : 멤버 변수와 마찬가지로 클래스 내부에 있지만, static 키워드가 붙었다. 자바 프로그램이 시작되고 클래스가 참조될 때 단 한 번 초기화되고 종료될 때까지 남아있다.
  • 메소드 매개 변수 : 메소드의 인자로 주어진 변수이며, 메소드 이름 옆의 괄호 안에 존재하는 변수이다.
  • 지역 변수 : 메소드 중괄호 내부에 존재하는 변수. 중괄호 안에서만 유효.

2) 변수의 이름을 지을 때 대문자로 시작해도 되나요?

상관은 없지만, 권장하지 않는 사항이다.

3) 자료형에는 기본 자료형과 어떤 자료형이 있나요?

참조 자료형.

4) 기본 자료형에는 몇 가지가 있나요?

  • 정수 자료형 : byte, short, char, int, long
  • 소수형 : double, float
  • boolean

총 8가지.

5) 기본 자료형 중 정수형에는 어떤 것들이 있나요?

byte, short, char, int, long

6) byte는 몇 비트(bit)로 되어있나요?

8bit

7) byte는 왜 만들었을까요?

사람이 사용하는 10진수를 01010100.. 으로 표현되는 컴퓨터의 2진수로 표현하기 위해

8) intlong중 어떤 타입이 더 큰 숫자를 표현할 수 있나요?

int는 8byte, long은 16byte이므로 long이 더 큰 숫자를 표현할 수 있다.

9) 소수첨을 처리하는 타입은 어떤 것이 있나요?

float, double

10) char은 정수형인가요?

2byte 크기를 가지는 정수형이 맞다. 유니코드의 문자를 표현하기 위한 unsigned 자료형이다.

11) a라는 것을 char로 정의할 때 어떤 기호로 감싸주어야 하나요?

홑따옴표 ''로 감싸주어야 한다.

12) true와 false 두 개의 값만을 가지는 타입은 어떤 것인가요?

boolean으로, 조건문의 조건으로 많이 쓰인다.


5장 : 계산을 하고 싶어요

1) 값을 할당할 때 사용하는 연산자의 기호는 무엇인가요?

=. 기호를 기준으로 좌변엔 변수, 우변엔 값이 존재한다.

2) 기본적인 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지를 계산하 ㄹ때 사용하는 연산자의 기호는 무엇인가요?

각각 +, -, *, /, %

3) +=는 무엇을 할 때 사용하는 연산자인가요?

좌변의 변수에 우변의 값을 더하고 싶을 때 사용한다.

int a = 3;

a = a + 3;
a += 3;

위 코드에서 아래 두 줄은 정확히 같은 역할을 한다.

4) 여러분들의 연산의 순서를 모르거나 확실히 하고 싶을 때는 어떤 기호를 사용해야 하나요?

먼저 수행되길 원하는 연산을 ()로 감싸준다.

5) ==!=의 차이는 무엇인가요?

전자는 두 변수의 값이 같은지, 후자는 다른지 여부를 boolean 타입으로 리턴한다.

6) <<=의 차이는 무엇인가요?

전자는 좌측 값이 우측보다 작아야만 true, 후자는 작거나 같으면 true를 반환한다. greater, greater or equal의 차이이다.

7) !연산자는 어떤 타입에 사용할 수 있나요?

boolean. 결과값을 반전시킨다.

8) "?:"로 표시하는 삼항 연산자의 ?:뒤에 명시해 주는 값은 무엇을 의미하나요?

int a = 1;
int b = 2;
String c = (a==b) ? "값이 같다" : "값이 다르다";

삼항 연산자는 위와 같이 사용한다. ?의 앞에 boolean값을 명시하고, 뒤에 :를 기준으로 앞에는 true일 때 반환할 값, 뒤에는 false일 때 반환할 값을 명시한다.

9) 자바는 형 변환을 한다고 했는데, short의 값을 long에 할당할 때에는 어떤 것을 해 주어야 하나요?

short보다 long이 더 큰 공간을 가지는 변수이다. 딱히 무언가를 해줄 필요는 없다.

10) 반대로 long 값을 short에 할당할 때에는 어떤 것을 해주어야 하나요?

long 변수나 값 앞에 (short)를 붙여 타입 캐스팅을 해주어야 한다. 이 때, 기존 long 타입 변수의 정보 일부분을 잃을 수 있다.

11) 910의 경우 중 어떤 경우가 기존 값이 사라지고, 엉뚱한 값으로 바뀔 수 있나요?

전술했듯, 더 많은 정보를 담고있는 타입에서 짧은 타입으로 형변환이 일어난 10의 경우이다.


6장 : 제가 조건을 좀 따져요

1) if 문장의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?

boolean타입.

2) if 조건에 맞지 않는 모든 경우를 처리할 때 사용하는 예약어는 뭔가요?

else

3) switch를 사용할 수 있는 기본 자료형의 타입에는 어떤 것들이 있나요?

기본적으로 long을 제외한 정수형이다. 추가로, Enum 자료형도 사용할 수 있다.

4) switch 블록 안에서 비교 대상값 앞에 사용하는 예약어는 무엇인가요?

case

5) switch 조건을 빠져나가도록 하는 예약어는 무엇인가요?

break. 해당 키워드를 사용하지 않으면 한 번 case를 만족한 이후 나머지 switch문의 코드를 전부 실행해버린다.

6) switch조건들에 맞지 않을 때 기본 처리를 하기 위한 예약어는 무엇인가요?

default

7) while문의 소괄호 안에는 어떤 형태의 결과가 제공되어야 하나요?

boolean. 소괄호 안의 조건이 true라면 while문 안의 몸체를 반복하고, false일 때 빠져나온다.

8) while문을 무조건 한번은 실행하게 하려면 어떻게 해야하나요?

do {
	System.out.println("한 번 실행되는 while문");
} while(false)

위 반복분은 while 조건문이 무조건 false이더라도 한 번은 실행된다. 이같이 do-while을 이용하면, while 조건을 따지기 전에 중괄호 내의 코드를 적어도 한 번은 실행한다.

9) while문을 마음대로 빠져나가게 하려면 어떤 예약어를 사용하면 되나요?

break

10) while문의 중간에 while문의 소괄호 점검 구문으로 건너뛰도록 할 때 사용하는 예약어는 무엇인가요?

continue

11) for루프의 소괄호 안의 가장 첫 구문(첫 세미콜론 앞의 문장)은 for루프가 수행되는 동안 몇 번 수행되나요?

한 번. 일반적으로 루프의 조건으로 사용되는 변수를 초기화하는 역할을 한다.

12) for 루프의 소괄호 안의 중간에 있는 구문들은 어떤 타입의 결과가 제공되어야 하나요?

for루프를 계속 돌 것인지 결정하는 종료조건boolean타입이 와야한다.

13) for루프의 소괄호 안의 마지막에 있는 구문에서는 어떤 작업을 수행하나요?

for루프의 로직을 수행한 뒤 종료조건에 사용되는 조건 값을 바꾸는 작업이 수행된다.


7장 : 여러 데이터를 하나에 넣을 수는 없을까요?

1) 배열을 선언할 때 어떤 키워드를 타입 앞이나 뒤에 사용해야 하나요?

대괄호 []이다.

int [] intArray = {1,2,3};

이런 식으로 배열을 초기화한다.

2) 배열의 첫 번째 위치는 0인가요, 1인가요?

대부분의 프로그래밍 언어에서 첫 번째 index 값은 0이고, 자바 역시 마찬가지이다.

3) 배열을 선언할 때 boolean 배열의 크기만 지정했다면 boolean 배열의 [0] 위치에 있는 값은 무엇인가요?

boolean 타입의 자동 초기화값 false.

4) ArrayIndexOutOfBoundsExcepton이라는 것은 언제 발생하나요?

배열에서 접근할 수 있는 크기 이상의 인덱스에 접근했을 때 발생한다. 예를 들어 int arr = new int[10];을 통해 선언한 arr배열의 20번째 인덱스에 접근한다면,

5) 중괄호를 이용하여 배열을 초기화할 때 중괄호 끝에 반드시 어떤 것을 입력해 주어야 하나요?

;

6) 2차원 배열을 정의할 때에는 대괄호를 몇 개 지정해야 하나요?

2개.

int [][] twoDims = new int[10][10];

위 코드는 10*10의 2차원 배열을 선언한다.

7) 배열을 쉽게 처리해주는 for문의 문법은 어떻게 되나요?

배열의 원소를 출력하기 위해 for문을 다음과 같이 사용한다.

int arr = {1,2,3,4,5};
for (int n : arr) {
	System.out.println(n);
}

8) 자바 프로그램에 데이터를 전달해 주려면 클래스 이름 뒤에 어떻게 구분하여 나열하면 되나요?

공백으로 구분한다. main(String[] args)args배열의 1번 인덱스부터 공백으로 구분된 데이터들이 위치하게 된다.

9) 자바 프로그램이 시작할 때 전달 받는 내용은 어떤 타입의 배열인가요?

전술한 String[] args로, 문자열 타입의 배열이다.


8장 : 참조 자료형에 대해 더 자세히 알아봅시다

1) 생성자는 반드시 만들어야 하나요?

생성자가 존재하지 않으면, javac 컴파일러가 매개변수가 없는 기본 생성자를 만든다.

2) 만약 매개 변수가 있는 생성자를 만들고, 매개 변수가 없는 기본 생성자를 호출하면 어떻게 될까요?

존재하지 않는 생성자를 호출했다는 컴파일러 오류가 발생한다. 생성자가 하나라도 있으면 컴파일러는 생성자를 만들어주지 않는다.

3) 생성자의 개수는 제한이 있나요?

멤버 변수를 설정할 수 있는 만큼 오버로딩 할 수 있다.

4) 인스턴스의 변수와 매개 변수나 메소드 내에서 생성한 변수와 구분하기 위해서 사용하는 키워드는 무엇인가요?

this 키워드이다. this.변수이름을 통해 접근하는 변수는 인스턴스의 변수로, 메소드 안에서만 사용되는 매개 변수 및 지역 변수와 구분된다.

5) 메소드 선언시 리턴 타입으로 지정한 데이터를 넘겨줄 때 필요한 키워드는 무엇인가요?

return이다. return 키워드 뒤에 반환할 데이터를 작성한다.

6) 메소드 선언시 아무 데이터도 리턴 타입으로 넘겨주지 않겠다는 것을 지정하는 키워드는 무엇인가요?

void

7) 메소드 선언에 static이 있는 것과 없는 것의 차이는 무엇인가요?

static 키워드가 없으면, 해당 메소드를 호출하기 위해 클래스 인스턴스가 반드시 생성되어야 하는 반면 static 키워드가 붙은 메소드는 그럴 필요가 없다. 메소드 로직에 객체 specific한 멤버 변수가 필요하지 않고 클래스 자체의 기능만 수

8) 필자가 엄청나게 중요하다고 한 것 중 메소드의 이름은 같으나 매개 변수를 다르게 하는 것의 명칭은 무엇인가요?

오버로딩. 메소드의 이름은 같아도 매개 변수의 개수나 타입이 다르면 달느 메소드가 호출된다. 이는 매개 변수의 타입이나 개수는 다르지만 같은 역할을 하는 메소드들을 조금 더 편리하고 직관적으로 선언할 수 있도록 하기 위함이다.

9) 기본 자료형을 매개 변수르 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?

pass by value.

10) 참조 자료형을 매개 변수르 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?

pass by reference... 이지만 사실 자바는 call by value이다. Reference type을 매개변수로 넘겨줄 때, 객체 자체를 넘겨주는 것이 아니라 객체의 참조 주소를 넘겨주는데, 메소드 호출이 끝나도 참조 주소는 바뀌지 않기 때문이다. 다음 예제 코드를 보자.

class MyClass {
	int value;
    public MyClass(int value) {
    	this.value = value;
    }
    
    public static void callByValue(MyClass myClass, int otherValue) {
    	myClass = new MyClass(otherValue);
    }
}

class Main {
	public static void main(String[] args) {
    	MyClass myClass = new MyClass(1);
        MyClass.callByValue(myClass,10);
        
        // 1
        System.out.println(myClass.value);
    }
}

분명 callByValue()메소드를 통해 매개 변수로 넘어온 참조 변수에 value값이 10인 새로운 객체르 할당했지만, 출력 결과는 1이 나온다. 이는 참조 변수의 주소 값을 pass by value했기 때문이다.

11) 매개 변수의 수가 가변적일 때 메소드 선언시 타입과 변수 이름 사이에 어떤 것을 적어줘야 하나요?

...를 적어주면 된다. 그럼 해당 매개 변수는 지정 타입의 배열 형식이 된다. 다만 이를 이용할 매개 변수의 가장 뒤에서 이용해야 한다.


9장 : 자바를 배우면 패키지와 접근 제어자는 꼭 알아야 해요

1) 패키지를 선언할 떄 사용하는 예약어는 무엇인가요?

package

2) 패키지 선언은 클래스 소스 중 어디에 위치해야 하나요?

소스 파일의 최상단의 위치해야 한다.

3) 패키지를 선언할 때 가장 상위 패키지의 이름으로 절대 사용하면 안되는 단어는 무엇인가요?

java. 자바와 자바 기본 API를 제작하는 진영에서만 사용한ㄴ다.

4) 패키지 이름에 예약어가 포함되어도 되나요?

NO!!! 더불어서, 대문

5) import는 클래스 내에 선언해도 되나요?

package 선언과 마찬가지로 클래스의 바깥, 상단에 위치해있어야 한다.

6) 같은 패키지에 있는 클래스를 사용할 때 import를 해야 하나요?

패키지는 namespace를 제공하는데 그 목적이 있다. 따라서 할 필요 없다.

7) 특정 패키지에 있는 클래스들을 모두 import할 때 사용하는 기호는 무엇인가요?

와일드카드 *.

8) 클래스에 선언되어 있는 static한 메소드나 변수를 import하려면 어떻게 선언해야 하나요?

import 키워드와 스태틱 메소드 및 변수 사이에 static 키워드를 추가하면 바로 사용할 수 있다.

9) 접근 제어자 중 가장 접근 권한이 넓은 (어떤 클래스에서도 접근할 수 있는) 것은 무엇인가요?

public

10) 접근 제어자 중 가장 접근 권한이 좁은 (다른 클래스에서는 접근할 수 없는) 것은 무엇인가요?

private

11) 접근 제어자 중 같은 패키지와 상속관계에 있는 클래스만 접근할 수 있도록 제한하는 것은 무엇인가요?

protected

12) Calculate.java라는 자바 소스가 있을 경우, 그 소스 내에는 Calculate라는 클래스외에는 ( )으로 선언된 클래스가 있으면 안 된다. 여기서 괄호 안에 들어가야 하는 것은 무엇인가요?

public. 해당 소스파일의 public class는 하나여야 하고, 그 클래스의 이름은 소스파일의 이름과 같아야 한다.


10장 : 자바는 상속이라는 것이 있어요

1) 상속을 받는 클래스의 선언문에 사용하는 키워드는 무엇인가요?

extends

2) 상속을 받은 클래스의 생성자를 수행하면 부모의 생성자도 자동으로 수행되나요?

그렇다. 자식 생성자가 수행되면 부모 생성자는 자동으로 수행된다. 이 때 수행되는 생성자는 매개 변수가 없는 기본 생성자로, 자바는 자식 클래스의 생성자를 호출할 때 기본 생성자를 호출하는 방식으로 동작한다.

3) 부모 클래스의 생성자를 자식 클래스에서 직접 선택하려고 할 때 사용하는 예약어는 무엇인가요?

super()이다. 매개 변수로 생성자에 넘겨줄 인자를 전달하면 그에 맞는 부모 클래스의 생성자가 호출된다.

4) 메소드 Overriding과 Overloading을 정확하게 설명해보세요.

오버로딩은 매개변수의 타입과 개수에 따라 클래스 내에서 같은 이름을 갖는 다른 메소드 혹은 생성자가 호출되는 기능을 말한다. 이로써 같은 기능을 하지만 데이터 타입이 다른 메소드들을 상황에 맞게 사용할 수 있다.
오버라이딩은 상위 클래스의 메소드, 혹은 인터페이스의 메소드를 하위 클래스에서 용도에 맞게 재정의하는 것을 의미한다. 이때, 오버로딩과 달리 메소드 매개변수의 개수와 타입, 반환 타입 등 메소드 시그니처가 모두 일치해야 한다.

5) A가 부모, B가 자식 클래스라면 A a = new B();의 형태로 객체 생성이 가능한가요?

가능하다. 자식 클래스의 생성자가 호출될 때 부모 클래스의 기본 생성자 역시 호출되어 부모 클래스의 객체 역시 생성되기 때문이다. 하지만 반대는 불가능하다. 부모 클래스의 생성자를 호출해도 자식 클래스의 객체는 생성되지 않는다.

6) 명시적으로 형 변환을 하기 전에 타입을 확인하려면 어떤 예약어를 사용해야 하나요?

instanceof

7) 6에서 사용한 예약어의 좌측에는 어떤 값이, 우측에는 어떤 값이 들어가나요?

앞에는 객체 인스턴스가, 뒤에는 클래스가 들어간다.

MyClass myClass = new MyClass();
System.out.println(myClass instanceof MyClass);

위와 같이 사용하며, 예시는 항상 true를 출력한다.

8) 6의 예약어의 수행 결과는 어떤 타이븡로 제공되나요?

boolean

9) Polymorphism이라는 것은 도대체 뭔가요?

참조 변수 타입이 무엇인가와는 상관없이, 실제로 생성된 인스턴스 클래스의 메소드가 호출되는 특징을 말한다.

List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();

// ArrayList의 add 호출
arrayList.add(1);
// LinkedList의 add 호출
linkedList.add(2);

위의 예시에서 arrayListlinkedList는 모두 List타입의 참조 변수이고 add메소드를 가지지만 실제 동작은 new를 통해 생성된 ArrayListLinkedList 각자의 add 메소드가 호출된다.


12장 : 모든 클래스의 부모 클래스는 Object에요

1) 모든 클래스의 최상위 부모 클래스인 Object 클래스는 어떤 패키지에 선언되어 있나요?

java.lang패키지에 선언되어 있다.

2) 클래스가 어떻게 선언되어 있는지 확인할 수 있는 명령어(실행 파일)의 이름은 무엇인가요?

javap

3) Object 클래스에 선언되어 있는 모든 메소드는 여러분들이 Overriding 해야하나요?

필요한 것만 선택적으로 하면 된다. 그러나 꼭 필요한 것이 아니라면 굳이 하지 않는 것이 좋다.

4) Object 클래스의 clone()메소드의 용도는 무엇인가요?

현재 객체와 같은 상태값을 가진 새 객체를 반환한다.

5) System.out.println() 메소드를 사용하여 클래스를 출력했을 때 호출되는 Object 클래스에 있는 메소드는 무엇인가요?

toString()

6) 객체의 주소를 비교하는 것이 아닌, 값을 비교하려면 Object 클래스에 선언되어 있는 어떤 메소드를 overriding 해야하나요?

equals()를 overriding하면 되는데, 이때는 hashCode()역시 같은 값을 가질 수 있도록 해야한다. 이유

7) Object 클래스에 선언되어 있는 hashCode()라는 메소드는 어떤 타입의 값을 리턴하나요?

int 타입이다. 객체 주소의 해시 값, 즉 16진수 객체 메모리 주소를 리턴한다.

profile
부추튀김인지 부추전일지 모를 정도로 빠싹한 부추전을 먹을래

0개의 댓글