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

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

낙산암 2020. 12. 10. 06:04

1.String 클래스에서 concat 메서드를 설명하시오.

- 문자열을 연결시키는 메소드

- "문자열1" + "문자열2" 연결의 경우, "문자열1".concat("문자열2")와 같은 방법으로 연결

- String으로 생성되는 객체는 immutable이기 때문에 리터럴이 바뀌지 않는다. 덧붙이거나 뗄 수 없다. 그래서 concat() 메소드를 사용해 Stirng 클래스를 붙이면 그때마다 계속 새로운 객체를 생성한다. (그림 참고)

- concat() 메소드는 계속 이어서 호출 가능 

class StringConcat {
	public static void main(String[] args) {
		String st1 = "Coffee";
		String st2 = "Bread";

		String st3 = st1.concat(st2);  
		System.out.println(st3);

		String st4 = "Fresh".concat(st3); //타입을 String으로 알아서 잡음
		System.out.println(st4);
	}
}

concat 설명

2.str.substring(2, 4); substring 사용법에 대하여 설명하시오.

문자열을 일부 추출하는 substring() 메소드

 

String str = "abcdefg";

str.substring(2);        //인덱스 2 부터 끝까지. 문자열 "cdefg" 반환
str.substring(2, 4);     //인덱스 2 ~ 3에 위치한 내용의 문자열 "cd" 반환

//함수 오버로딩 적용됨
//index는 0부터 셈

substring 설명

3.st1.compareTo(st2);compareTo 사용법에 대하여 설명하시오.

compareTo() 메소드 와 compareToIgnoreCase() 메소드 (IgnoreCase 대소문자 구분안함)

문자열의 내용을 비교해서 사전 상에서 앞에 있는지 뒤에 있는지 알려 줌

 

java
int cmp;       //리턴값은 정수 int
cmp = st1.compareTo(st2);**

cmp == 0 → 같은 문자열이다.
cmp < 0 → st1이 앞에 나온다.
cmp > 0 → st1이 뒤에 나온다.

4.String.valueOf 에 대하여 설명하시오.

기본 자료형(모든 타입을)의 값을 문자열로 바꿀 때 사용하는 valueOf() 메소드

함수 오버로딩이 적용되어 있어 기본 자료형 8개의 타입의 값을 모두 String 타입으로 바꿔줄 수 있다.

 

double e = 2.718281;

String se = String.valueOf(e);  //valueOf();는 함수이고, .으로 접근하는 static임
//se에는 "2.718281"

static String valueOf(boolean b) 
static String valueOf(char c)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
// 함수 오버로딩이 적용되어있다.

5. 아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;

double e = 2.718281;

 

String se = String.valueOf(e); //valueOf();는 함수이고, .으로 접근하는 static

//se에는 "2.718281"

 

static String valueOf(boolean b)

static String valueOf(char c)

static String valueOf(double d)

static String valueOf(float f)

static String valueOf(int i)

static String valueOf(long l)

// 함수 오버로딩이 적용되어있다.

 

6.StringBuilder String 의 차이는?

Stringimmutable(불변함) 이고 값 변화 못시킴

StringBuilderStringBuffermutable(변함) 이다. 값 변화 시킴**

 

Stringimmutable이기 때문에 예를 들어 + ( concat() ) 를 하게되면 기존의 메모리를 두고 계속 새로운 객체를 생성한다.

만일 for문으로 concat()을 계속 사용하게 로직을 사용 하면 StringBuilderStringBuffer에 비해 시간도 오래 걸리고, 메모리공간도 많이 사용하게 되는 단점이 있다. (It costs a lot! 비용이 든다. _비용보다 시간이 더)

 

반면에 StringBilder StirngBuffermutable이라서 최초 한번만 객체를 생성하고 거기에 + ( append() )를 할 경우 **같은 주소(가리키고 있는)의 메모리 공간 안에서 객체 크기를 증가 시키며 두 문자열을 더해준다. ([최적화])

 

StringBuilder, StringBuffer 메소드 예시 (string에도 있는 메소드이다.)

7.String 을 이용하여 프로그래밍 하시오.

입력 : 990925-1012999

출력 : 990925 1012999

 

import java.util.Scanner;

public class SocialSecuritynumber {
	private String input;
	private StringBuilder ssNumber;
	
	private void inputSSN() {
		Scanner sc = new Scanner(System.in);
		System.out.println("주민번호 전체를 입력하세요. (예: 123456-789012)");
		input = sc.nextLine();
		sc.close();
	}
	
	private void removeHyphen() {
		if(input.length()<13 || input.length()>13) {
			System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
			return;
		}
		ssNumber = new StringBuilder(input);
		ssNumber.replace(6, 7," ");
	}
	
	private void namePrint() {
		System.out.println(ssNumber);
	}
	
	public void manageSSN() {
		inputSSN();
		removeHyphen();
		namePrint();

	}
}

public class SSN_Main {

	public static void main(String[] args) {

		SocialSecuritynumber ssn = new SocialSecuritynumber();
		ssn.manageSSN();

	}
}

8.아래의 메모리 그림을 그리시오.

int[] ar1 = new int[5];

 

1차원 배열 설명

9.아래를 프로그래밍 하시오.(단 클래스로 구성할것)

입력:lee sunkyo

출력:first name: lee second name:sunkyo

public class Name {
	private String firstName;
	private String secondName;
	
	public Name() {
		
	}
	
	public Name(String firstName, String secondName) {
		this.firstName = firstName;
		this.secondName = secondName;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getSecondName() {
		return secondName;
	}

	public void setSecondName(String secondName) {
		this.secondName = secondName;
	}

	private void input () {
		Scanner sc = new Scanner(System.in);
		System.out.println("영문 이름을 입력하세요: 성 이름");
		secondName = sc.next();
		firstName = sc.next();
		sc.close();
	}
	
	private void pirntName () {
		if(secondName == null || firstName == null) {
			System.out.println("입력이 안되었습니다.");
			return;
		}
		System.out.print("first name: "+ firstName + ", ");
		System.out.println("second name: "+ secondName);
	}
	
	public void manageName() {
		input();
		pirntName();

	}	
}

public class NameMain {

	public static void main(String[] args) {
		Name names = new Name();
		names.manageName();

	}
}

 

10.아래를 프로그래밍 하시오.

 

입력 : 홍 길동

출력 : = 홍 이름 = 길동

 

입력 : 홍길동

출력 : 공백이 없군요. 다시 입력해주세요.

 

import java.util.Scanner;
public class KoreanName {
	private String familyName; //local 변수 일때는 직접 초기화.
	private String givenName;
	private String input;
	private int blank;
	private int length;
	
	Scanner sc;
	
	public void askName() {
		sc = new Scanner(System.in);
		System.out.println("이름을 입력하세요 (예: 홍 길동)");
	}
	
	public void inputName() {
		input = sc.nextLine();
	}
	
	public boolean checkBlank() {
		if(input.contains(" "))
			return true;
		return false;
	}
	
	private void whereIsBlank() {
		for(int i=0; i<input.length(); i++) {
			if(input.charAt(i) == ' ') {
				blank = i;
			}
		}
	}
	
	private void leghtOfName(){
		length = input.length();
	}
	
	private void splitName() {
		familyName = input.substring(0, blank);
		givenName = input.substring(blank+1, length);
	}
	
	private void pirntName() {
		System.out.println("성 = "+ familyName + ", 이름 = "+ givenName);
	}
	
	public void doAgainPrint() {
		System.out.println("공백이 없군요. 다시 입력해 주세요.");
	}
	
	public void blankCheck_namePrint() {
		whereIsBlank();
		leghtOfName();
		splitName();
		pirntName();
	}
}

public class KrNameMain {

	public static void main(String[] args) {
		
		KoreanName whichName = new	KoreanName();
		whichName.askName();
	
		while(true) {
			whichName.inputName();
			
			if(whichName.checkBlank()) {
				whichName.blankCheck_namePrint();
				break;
			}else {
				whichName.doAgainPrint();
				continue;
			}
		}
	}
}

 

11.아래를 프로그래밍 하시오.

"Hello.java" 문자열에서 파일명과 확장자인 java를 분리시키는 프로그램을 짜시오.

 

입력: Hello.java

출력: 파일이름은:Hello 이며 확장자는 java 입니다.

 

입력: Java.avi

출력: 파일이름은:Java 이며 확장자는 avi 입니다.

문제12. Scanner 클래스를 이용해서 한 줄 읽고, 공백으로 분리된 "단어"가 몇 개 들어 있는지 확인해보자.

 

"그만"을 입력할 때까지 반복하는 프로그램이다.힌트(split 함수를 이용해 볼것)

 

) 입력 : Java Programming

출력 : 단어의 개수는 2

입력 : 자바 수업은 2C클래스

출력 : 단어의 개수는 4

입력 : 그만 > 출력 : 프로그램 종료

 

public class SeparateFileName {
	private String input;
	private int dot;
	private int length;
	private String fileName, extention;
	
	
	public SeparateFileName() {
		
	}
	
	public SeparateFileName(String input) {
		this.input = input;
	}

	public String getInput() {
		return input;
	}

	public void setInput(String input) {
		this.input = input;
	}

	private void inputFileName() {
		System.out.println("파일 이름을 입력하세요. (파일명.확장자)");
		Scanner sc = new Scanner(System.in);
		input = sc.nextLine();
		sc.close();
	}
	
	private void fileLength() {
		length = input.length();
	}
	
	private void whereIsDot() {
		for(int i=0; i<input.length(); i++) {
			if(input.charAt(i) == '.') {
				dot = i;
			}
		}
	}
	
	private void separate() {
		fileName = input.substring(0, dot);
		extention = input.substring(dot+1, length);
	}
	
	private void seperatePrint() {
		System.out.println("파일 이름은: " + fileName + " 이며 확장자는 " + extention + " 입니다." );
	}
	
	public void fileNameSeperation() {
		inputFileName();
		fileLength();
		whereIsDot();
		separate();
		seperatePrint();
	}
}

public class FileNameMain {

	public static void main(String[] args) {
		SeparateFileName checkFile = new SeparateFileName();
		checkFile.fileNameSeperation();
	}
}