1. String 클래스에서 문자열 비교시 equals를 사용하는 이유?
· String에서의 equals는 부모클래스에 있는 equals 메소드를 오버라이딩 하였기 때문에 문자열 비교가 가능하다.
반드시 자식클래스로 형변환을 실행해줘야 사용이 가능하다. ex: (INum)obj.num
2. Shallow copy와 Deep copy의 차이는? **중요**
· class 내에 객체 형의 데이터 멤버가 존재할 때 (객체가 아닌 변수가 존재하는 경우는 크게 상관x)
Shallow Copy의 경우, 해당 객체만 복사하여 사용되고, 세부적인 객체는 따로 복사되지 않기 때문에 값이 공유된다.
Deep Copy의 경우, 세부적인 객체까지 복사되어 참조하는 인스턴스가 전혀 다르기 때문에 값이 공유되지 않는다.
3. 아래를 참고하여 Rectangle의 shall copy와 deep copy 메모리를 그리시오. **중요 외우기!**
· Shallow Copy의 경우, clone 호출 시 Rectangle의 Point만 Copy, new Point의 주소까지는 No Copy
4. 다음 main()이 실행되면 아래 예시와 같이 출력되도록 MyPoint 클래스를 작성하라.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class MyPoint {
private int x;
private int y;
public MyPoint(int x, int y){
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point(" + x + "," + y + ")";
}
@Override
public boolean equals(Object obj) {
if(this.x == ((MyPoint)obj).x && this.y == ((MyPoint)obj).y)
return true;
else
return false;
}
}
|
cs |
5. 중심을 나타내는 정수 x, y와 반지름 radius 필드를 가지는 Circle 클래스를 작성하고자 한다.
· 생성자는 3개의 인자(x, y, raidus)를 받아 해당 필드를 초기화하고, equals() 메소드는 두 개의 Circle 객체의 중심이 같으면
같은 것으로 판별하도록 한다.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Circle {
private int x;
private int y;
private int radius;
Circle(int x, int y, int radius){
this.x = x;
this.y = y;
this.radius = radius;
}
@Override
public String toString() {
return ("Circle(" + x + "," + y + ")반지름" + radius);
}
@Override
public boolean equals(Object obj) {
if((this.x == ((Circle)obj).x) && (this.y == ((Circle)obj).y))
return true;
else
return false;
}
}
|
cs |
6. 문자열을 입력받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라.
· 클래스로 작성할 필요 없이 메인에서 작성할 것
· [H·int] Scanner.nextLine()을 이용하면 빈칸을 포함하여 한 번에 한 줄을 읽을 수 있다.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Love {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("문장을 입력해주세요.");
String str = sc.nextLine();
for(int i = 1; i < str.length(); i++) {
System.out.print(str.substring(i));
System.out.println(str.substring(0, i));
}
sc.close();
}
}
|
cs |
7. Wrapper 클래스란?
· 기본 자료형 8개를 인스턴스로 요구되는 경우가 존재하는데, 그 때 객체로 다루기 위해서 사용하는 클래스들을
래퍼 클래스라 하며, class 내부에 있는 함수를 사용한다.
· 래퍼 클래스는 기본 자료형의 첫 글자를 대문자로 변경해서 표기한다.
8. auto unboxing 이란?
①Boxing: 기본자료형을 객체로 변환 ex) Interger obj = new Integer(10);
②UnBoxing: 객체를 기본자료형으로 변환 ex) int num = obj.intValue();
③Auto Boxing/Auto UnBoxing: 인스턴스를 직접적으로 혹은 기본자료형을 직접적으로 대입하는 경우 자동 변환되는 기능
ex) Auto Boxing → Integer iObj = 10; Auto UnBoxing → int num = obj;
9. 다음 조건을 만족하는 클래스 Person을 구현하여 테스트하는 프로그램을 작성하시오. (필수)
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Person {
private String name;
public Person(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if(this.name == ((Person)obj).name)
return true;
else
return false;
}
}
|
cs |
10. String 객체 프로그램을 이용하여 equals 메소드와 연산자 == 차이를 비교 설명하시오. (필수)
· s1과 s2는 서로 다른 인스턴스를 생성하고, s3은 s2의 인스턴스를 참조한다.
연산자 == 는 같은 인스턴스를 참조하는지 비교하며,
equals 메소드는 부모클래스인 Object의 함수로써 단순히 문자열이 같은지 내용을 비교한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class String {
private String str;
String(String str){
this.str = str;
}
@Override
public boolean equals(Object obj) {
if(this.str == ((String)obj).str)
return true;
else
return false;
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
class Stringmain {
public static void main(String[] args) {
String s1 = new String("java");
String s2 = new String("java");
String s3 = s2;
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
System.out.println(s2 == s3);
System.out.println(s2.equals(s3));
}
}
|
cs |
11. 다음 조건을 만족하도록 오늘의 정보를 출력하는 프로그램을 작성하시오.
· 참고: Calendar 객체의 다음 메소드를 사용할 것!
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
class Calendarmain {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int mon = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DATE);
int week = cal.get(Calendar.DAY_OF_WEEK);
String str = "a";
switch(week) {
case (1) :
str = "일";
break;
case (2) :
str = "월";
break;
case (3) :
str = "화";
break;
case (4) :
str = "수";
break;
case (5) :
str = "목";
break;
case (6) :
str = "금";
break;
case (7) :
str = "토";
break;
}
System.out.println("오늘은 " + year + "년 " + (mon+1) + "월 " + day + "일 " + str + "요일입니다.");
System.out.println("이 달의 " + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "번째 " + str + "요일입니다.");
System.out.println("이 달의 " + cal.get(Calendar.WEEK_OF_MONTH) + "번째 주입니다.");
System.out.println("이 해의 " + cal.get(Calendar.DAY_OF_YEAR) + "일입니다.");
System.out.println("이 해의 " + cal.get(Calendar.WEEK_OF_YEAR) + "번째 주입니다.");
}
}
|
cs |
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/21_제네릭, 컬렉션 프레임워크 (0) | 2021.02.05 |
---|---|
면접족보 20/12/18_제네릭 개념 (0) | 2021.02.03 |
면접족보 20/12/16_예외처리 (0) | 2021.02.01 |
면접족보 20/12/15_추상메소드, 예외처리 (0) | 2021.01.31 |
면접족보 20/12/14_인터페이스, 추상클래스 개념 (0) | 2021.01.31 |