1. 인스턴스 함수에 클래스 변수와 함수가 접근 할 수 있는 이유는?
· 클래스 변수와 함수는 미리 메모리에 저장되어 있는 상태이기 때문에 Call Stack 영역에 저장되는 인스턴스 함수에는
접근이 가능하다.(메모리에 static이 먼저 올라가기 때문!)
2. 메소드 오버로딩이란?
· 같은 class 내에서 사용하려는 메소드 명이 이미 존재하는 경우, 파라미터(매개변수)의 수가 다르거나 데이터 타입이 다른 경우
컴파일 오류가 발생하지 않는다. (같은 메소드 명을 매개변수의 타입과 개수를 달리하여 사용)
· why? 메소드 명이 같을 때 매개변수의 수와 데이터 타입이 다르기 때문에 컴파일 시 구분이 가능해진다.
· ex)

3. 메소드 오버로딩을 적용한 대표적인 함수는?
· println(), 아래와 같이 데이터 타입마다 코딩을 따로 해두었기 어떠한 값을 넣어도 오류가 발생하지 않으며,
매개변수의 수 혹은 데이터 타입을 통해 구분하여 컴파일을 실행한다.
· ex)

· out.println()을 printlnString(""); 으로 설정을 하지 않은 이유?
타입을 확정해두면 타입에 맞게 사용해야 하기 때문에 사용자에게 편리성을 제공하기 위함으로,
String을 제외하고는 각각의 타입에 맞게 코딩이 되어 있어 함수만 호출하여도 사용이 가능하다.
(java의 기능 중 하나인 캡슐화의 기능이 적용된 예이며, c언어에서는 적용되지 않는다)
★오버로딩과 오버라이딩 차이점 반드시 기억할 것!!!★
4. this와 this 함수에 대하여 설명하시오.
· this란? 메소드 내에 동일한 변수명이 있더라도 변수명 앞에 this를 표기한다면 인스턴스 변수를 의미한다.
· ex) this.data는 인스턴스 변수 data를 의미

· this 함수란? 자기 자신의 생성자를 호출함으로서 생성자의 초기화 과정을 생략해주는 함수이다.
· ex) rnum과 0을 인자로 받는 오버로딩 된 생성자를 호출하여 초기화 시키며, 중복된 코드를 줄인다.

5. 아래의 결과를 예측하고,이유를 설명하시오.

· 결과 예측
str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조
· "Simple String"가 메모리에 저장될 때, 대소문자/spelling이 모두 같다면 그 자체를 동일하게 판단하여 한 개의 인스턴스만 생성하기 때문에 str1과 str2는 동일한 인스턴스를 참조한다.(따옴표" "를 상수로 인식)
만약 str2가 "simple String" 이라면 s의 대소문자가 다르기 때문에 str1과 str2는 다른 인스턴스를 참조한다.
· str3과 str4는 new를 선언하여 아예 다른 객체를 생성하므로 다른 인스턴스를 참조한다.
· 객체 확인이 아닌 단순히 "Simple String"이 같은 글인지 확인하고 싶다면 equals 함수를 이용하여 확인이 가능하다.
ex) if(str1.equals(str3)) → true 반환
6. Immutable 에 대하여 설명하시오.
· Mutable class: 인스턴스 생성된 후에 값의 내용이 변할 수 있는 클래스이다.
· Immutable class: 인스턴스 생성된 후에는 인스턴스의 내용이 절대 변하지 않는 클래스이다.(String)
· ex) 출력→ HelloHello2


s는 Hello를 참조하고 있으며, 원래의 값을 변경 할 수 없다는 불변의 의미를 가진 Immutable은 s가 아닌 Hello를 일컫는다.
Hello는 절대 변할 수 없으므로, s = s + "Hello2"의 연산이 이루어지면 원래 참조하던 Hello에 연산이 되는게 아닌 새로운 객체를 생성하여 아래와 같이 HelloHello2를 참조하게 된다.

7. 사용자로부터 받은 영문에서 자음과 모음 개수를 계산하는 프로그램을 작성하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Aeiou {
private String s;
private int i, m = 0;
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public void getMcnt() {
String s1 = s.toUpperCase();
for (i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == 'A' || s1.charAt(i) == 'E' || s1.charAt(i)
== 'I' || s1.charAt(i) == 'O' || s1.charAt(i) == 'U')
m++;
}
System.out.println("모음 개수: " + m);
System.out.println("자음 개수: " + (s1.length() - m));
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
class Aeioumain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Aeiou aeiou = new Aeiou();
System.out.println("영문을 입력해주세요.");
String s = sc.next();
aeiou.setS(s);
aeiou.getMcnt();
}
}
|
cs |
8. 사용자의 체중과 비교하여 저체중/표준/과체중인지를 판단하는 프로그램을 작성하라.
(사용자로부터 키를 입력받아 표준 체중 계산)
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
|
//표준 체중 계산식은 다음을 사용하라.
//표준체중 = ( 키 - 100 ) * 0.9
class Weight {
private int kg, cm;
public int getKg() {
return kg;
}
public void setKg(int kg) {
this.kg = kg;
}
public int getCm() {
return cm;
}
public void setCm(int cm) {
this.cm = cm;
}
public void getVal() {
double sw = (cm - 100) * 0.9;
if (sw == kg) {
System.out.println("표준체중입니다.");
} else if (sw > kg) {
System.out.println("저체중입니다.");
} else
System.out.println("과체중입니다.");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Weightmain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Weight w = new Weight();
System.out.println("체중을 입력해주세요.");
int kg = sc.nextInt();
System.out.println("신장을 입력해주세요");
int cm = sc.nextInt();
w.setKg(kg);
w.setCm(cm);
w.getVal();
}
}
|
cs |
9. 2와 100 사이에 있는 모든 소수(prime number)를 찾는 프로그램을 작성하라.
cf) 주어진 정수 k를 2부터 k-1까지의 숫자로 나누어서 나머지가 0인 것이 하나라도 있으면 소수가 아니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Num{
public static void main(String[] args) {
int count = 0;
for(int k = 2; k <= 100; k++){
for(int n = 2; n <= k; n++){
if(k % n == 0) {
count++;
}
if(count == 1) {
System.out.println(k);
}
count=0;
}
}
}
|
cs |
10. 사용자에게 받은 문자열을 역순으로 화면에 출력하는 프로그램을 작성하시오.
1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//입력:abcde
//출력:edcba
class Reversewords {
public static void main(String[] args) {
String words;
Scanner sc = new Scanner(System.in);
words = sc.next();
for (int i = words.length() - 1; i >= 0; i--) {
System.out.print(words.charAt(i));
}
}
}
|
cs |
2)
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
|
class Reverse {
private String words;
public Reverse() {
}
public Reverse(String words) {
this.words = words;
}
public String getWords() {
return words;
}
public void setWord(String words) {
this.words = words;
}
public void input() {
Scanner sc = new Scanner(System.in);
System.out.println("입력할 단어를 넣으세요.");
words = sc.next();
sc.close();
}
public void reversePrint() {
if (words == null) {
System.out.println("단어 입력이 안되었습니다.");
return;
}
for (int i = words.length() - 1; i >= 0; i--) {
System.out.print(words.charAt(i));
}
}
}
|
cs |
1
2
3
4
5
6
7
|
class Reversemain {
public static void main(String[] args) {
Reverse reverse = new Reverse();
reverse.input();
reverse.reversePrint();
}
}
|
cs |
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/09_배열 (0) | 2021.01.30 |
---|---|
면접족보 20/12/08_String 클래스의 메소드 (0) | 2021.01.24 |
면접족보 20/12/04_캡슐화, static, JAVA의 메모리 영역 (0) | 2021.01.24 |
면접족보 20/12/03_경로설정, 접근제한자 (0) | 2021.01.24 |
면접족보 20/12/02_생성자 (0) | 2021.01.24 |