IT 면접족보/자바 면접족보

자바 면접 족보 정리(11일 차 )

낙산암 2020. 12. 9. 06:32
public class Reverse {

	public static void main(String[] args) {
		String word;
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("영어 단어를 입력하세요.");
		word = scanner.next();
		
		for (int i = word.length()-1; i>=0;i--){
			System.out.print(word.charAt(i));
		}
	}
}

1.인스턴스 함수안에 스태틱 변수와 함수가 올수 있는 이유는?

인스턴스 함수는 static, 인스턴스 변수와 함수를 모두 사용할 수 있는데, static**메모리에 먼저 올라와 있기 때문에(메모리 생성 시기가 빠름)** 당연히 둘 다 호출할 수 있다.

 

static은 스캔되면 바로 메모리 방을 생성하지만 인스턴스 변수나 함수는 객체가 생성되어야 메모리가 할당된다.

2.메소드 오버로딩이란?

- 똑같은 함수 이름으로 매개 변수(파라미터)의 타입과 개수를 달리해서 함수를 만들 수 있는것

- c언어는 똑같은 함수 이름을 사용하는 것 자체가 안되는데 OOP(object oriented programming)는 같은 함수 이름을 허용(혁명적 이었음)

- 호출된 메소드를 찾을 때 참조하게 되는 두 가지 정보

: 메소드의 이름/ 메소드의 매개변수 정보

 

따라서 이 둘 중 하나의 형태가 다른 메소드를 정의하는 것이 가능하다.

3.메소드 오버로딩을 적용한 대표적인 함수는?

 

System.out.println("가나다");

System.out.println(1.23);

System.out.println(1.23f);

System.out.println(123L);

System.out.println(123);

System.out.println('a');

System.out.println(1 < 100);

 

이미 각각의 타입으로 오버로딩 되어서 코딩이 되어 있기 때문에 사용할 수 있는 것.

사용자가 사용하기 쉽게 encapsulation(캡슐화) 되어 있기 때문에 이렇게 오버로딩 되어 있는 것이 더 좋다.

(예를 들면 printstring, printchar...이런 방법 보다)

어떤 데이터 타입이 와도 같은 기능을 하게될 때는 함수 오버 로딩을 적용하는 것이 좋다.

4.this 함수에 대하여 설명하시오.

생성자의 오버로딩 & this(); 생성자

생성자 에서 중복된 코드를 줄이기 위해 또 다른 생성자 호출할 때 사용하는 것이 this();생성자 함수

 

class Person {
	private int regiNum; // 주민등록 번호
	private int passNum; // 여권 번호

	Person(int rnum, int pnum) { //생성자 함수
		regiNum = rnum;
		passNum = pnum;
	}

  Person(int rnum) { //오버로딩
 //	regiNum = rnum;   //원래 코드
 //	passNum = 0;

		this(rnum, 0);    //어떤 함수를 호출한걸까? 
	}

/*
위에있는 생성자함수를 호출한 것이다.(가능한 것은 그거밖에 없음)
= rnum과 0을 인자로 받는 오버로딩 된 다른 생성자 호출(중복된 코드를 줄이는 효과!)
*/
   
 ...
	}	
}

5.this란 무엇인가?

this(); //생성자 함수: this 생성자라고 표현 this.

//인스턴스 변수와 파라미터 이름이 같을 때 구분하기 위해 사용

 

this. :키워드 this를 이용한 인스턴스 변수의 접근 객체 생성 했을 때의 자기 자신을 나타냄. 인스턴스 변수 자기자신과 매개변수(파라미터)로 들어오는 변수의 이름이 동일할 경우 구분을 위해서 사용 (이 용도 이상으로는 쓰이지 않는다.)

6.스트링 객체를 생성하는 2가지 방법은?

this. :키워드 this를 이용한 인스턴스 변수의 접근 객체 생성 했을 때의 자기 자신을 나타냄.

인스턴스 변수 자기자신과 매개변수(파라미터)로 들어오는 변수의 이름이 동일할 경우 구분을 위해서 사용 (이 용도 이상으로는 쓰이지 않는다.)

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

String str1 = "Simple String";

String str2 = "Simple String";

 

String str3 = new String("Simple String");

String str4 = new String("Simple String");

 

if(str1 == str2)

System.out.println("str1str2는 동일 인스턴스 참조");

else

System.out.println("str1str2는 다른 인스턴스 참조");

 

if(str3 == str4)

System.out.println("str3str4는 동일 인스턴스 참조");

else

System.out.println("str3str4는 다른 인스턴스 참조");

 

결과 예측

str1과 str2는 동일 인스턴스 참조 str3과 str4는 다른 인스턴스 참조

인스턴스 참조 그림

7.immutable 에 대하여 설명하시오.

8. 사용자로부터 받은 문자열(영문으로)에서 자음과 모음 개수를 계산하는 프로그램을 작성하라.

 

String 인스턴스는 Immutable(불변의) 인스턴스 ( ←→ mutable )

 

String클래스로 생성하는 객체는 기본적으로 immutable이다. 상수(리터럴) 값은 메모리 instance pool에 올라간다.

 

그래서 한번 메모리에 올라가 있는 문자열과 똑같은 문자열로 String 객체를 생성하려고 할 때 그 값은 이미 메모리에 올라가 있기 때문에 그것을 찾아 주소를 전달한다.

 

하지만 한개 문자나 대문자 혹은 소문자가 다른 문자열을 생성 하면 새로운 인스턴스 생성되며, 문자열을 더하는 연산을 하면 먼저 만들어진 메모리 공간은 두고 새로운 메모리공간을 잡아서 생성한다.

 

 

이미 각각의 타입으로 오버로딩 되어서 코딩이 되어 있기 때문에 사용할 수 있는 것. **사용자가 사용하기 쉽게 encapsulation(캡슐화)** 되어 있기 때문에 이렇게 오버로딩 되어 있는 것이 더 좋다. (예를 들면 printstring, printchar...이런 방법 보다) **어떤 데이터 타입이 와도 같은 기능을 하게될 때는 함수 오버 로딩을 적용하는 것이 좋다.**

9. 사용자로부터 키를 입력받아서 표준 체중을 계산한 후에 사용자의 체중과 비교하여 저체중인지, 표준인지, 과체중인지를 판단하는 프로그램을 작성하라. 표준 체중 계산식은 다음을 사용하라.

 

9.사용자로부터 받은 문자열(영문으로)에서 자음과 모음 개수를 계산하는 프로그램을 작성하라.

import java.util.Scanner;

public class ConsVowMain {
	public static void main(String[] args) {
	int consonant=0;  //자음 갯수 
	int vowel=0;      //모음 갯수
	String word;     //입력 받는 문자열 
	
	Scanner scanner = new Scanner(System.in);
	System.out.println("영어 단어를 입력하세요.");
	word = scanner.next();
	
	for(int i =0; i < word.length(); i++) { //index 0번부터 시작
		switch(word.charAt(i)) {             //문자열을 캐릭터로 바꾼 뒤 비교 
		case 'a' :
		case 'e':
		case 'i':		
		case 'o':			
		case 'u':
			vowel++;
			break;
		default:
			consonant++;
		}
	}
	System.out.println("총 글자 수는: "+ word.length()+"개 입니다.");
	System.out.println("모음은 : " + vowel + "개 입니다.");
	System.out.println("자음은 : " + consonant + "개 입니다.");
}

}

10. 2100 사이에 있는 모든 소수(prime number)를 찾는 프로그램을 작성하라. 주어진 정수 k2부터 k-1까지의 숫자로 나누어서 나머지가 0인 것이 하나라도 있으면 소수가 아니다.

import java.util.Scanner;
public class BodyWeightMain {

	public static void main(String[] args) {
		double height, weight;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("키(cm)를 입력하세요. : ");
		height = sc.nextInt();
		
		BodyWeight weightForH = new BodyWeight();
		weightForH.setHeight(height);
		
		System.out.print("체중(kg)을 입력하세요. : ");
		weight = sc.nextInt();
		weightForH.setWeight(weight);
		
		weightForH.MediumWeight();
		weightForH.yourWeight();
		
	}
}

public class BodyWeight {
	private double height, weight;
	private double mWeight;	

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}

	public double getWeight() {
		return weight;
	}

	public void setWeight(double weight) {
		this.weight = weight;
	}

	public void MediumWeight () {
		mWeight = (height - 100)* 0.9;
		System.out.println("표준 체중은 " + mWeight +"입니다.");
	}
	
	public void yourWeight() {
		if(weight > mWeight) {
			System.out.println("당신은 과체중 입니다. ");
		}else if(weight < mWeight) {
			System.out.println("당신은 저체중 입니다. ");
		}else {
			System.out.println("당신은 표준 체중 입니다.");
		}
	}
}

11.사용자에게 받은 문자열을 역순으로 화면에 출력하는 프로그램을 작성하시오.

입력:abcde

출력:edcba

public class Reverse {

	public static void main(String[] args) {
		String word;
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("영어 단어를 입력하세요.");
		word = scanner.next();
		
		for (int i = word.length()-1; i>=0;i--){
			System.out.print(word.charAt(i));
		}
	}
}