본문 바로가기

bitcamp/JAVA

메소드 오버로딩과 String 클래스

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

· 같은 class 내에서 사용하려는 메소드 명이 이미 존재하는 경우, 파라미터(매개변수)의 수가 다르거나 데이터 타입이 다른 경우

 컴파일 오류가 발생하지 않는다. (같은 메소드 명을 매개변수의 타입과 개수를 달리하여 사용)

· why? 메소드 명이 같을 때 매개변수의 수와 데이터 타입이 다르기 때문에 컴파일 시 구분이 가능해진다.

· ex)

 

2. 메소드 오버로딩의 조건

· 메소드 명이 동일해야 한다.

· 매개변수의 개수 또는 데이터 타입이 달라야 한다.

· 매개변수는 동일하지만 리턴 타입이 다른 경우 성립되지 않는다.

 

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

· println(), 아래와 같이 데이터 타입마다 코딩을 따로 해두었기 어떠한 값을 넣어도 오류가 발생하지 않으며,

 매개변수의 수 혹은 데이터 타입을 통해 구분하여 컴파일을 실행한다.

· ex)

 

· out.println()을 printlnString(""); 으로 설정을 하지 않은 이유?

 타입을 확정해두면 타입에 맞게 사용해야 하기 때문에 사용자에게 편리성을 제공하기 위함으로,

 String을 제외하고는 각각의 타입에 맞게 코딩이 되어 있어 함수만 호출하여도 사용이 가능하다.

 (java의 기능 중 하나인 캡슐화의 기능이 적용된 예이며, c언어에서는 적용되지 않는다)

 

오버로딩과 오버라이딩 차이점 반드시 기억할 것!!!

 

 

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

· this란? 메소드 내에 동일한 변수명이 있더라도 변수명 앞에 this를 표기한다면 인스턴스 변수를 의미한다.

· ex) this.data는 인스턴스 변수 data를 의미

· this 함수란? 자기 자신의 생성자를 호출함으로서 생성자의 초기화 과정을 생략해주는 함수이다.

· ex) rnum과 0을 인자로 받는 오버로딩 된 생성자를 호출하여 초기화 시키며, 중복된 코드를 줄인다.

 

5. String 객체 생성의 두가지 방법은? 

· new를 선언하여 String 객체 생성하는 방법

· 따옴표(" ")를 이용하여 다이렉트로 String 객체 생성하는 방법 (String은 많이 사용하기 때문에 java에서 허용)

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

· 결과 예측 

  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 반환

 

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

· Mutable class: 인스턴스 생성된 후에 값의 내용이 변할 수 있는 클래스이다.

· Immutable class: 인스턴스 생성된 후에는 인스턴스의 내용이 절대 변하지 않는 클래스이다.(String)

· ex) 출력→ HelloHello2 

 s는 Hello를 참조하고 있으며, 원래의 값을 변경 할 수 없다는 불변의 의미를 가진 Immutable은 s가 아닌 Hello를 일컫는다.

 Hello는 절대 변할 수 없으므로, s = s + "Hello2"의 연산이 이루어지면 원래 참조하던 Hello에 연산이 되는게 아닌 새로운 객체를 생성하여 아래와 같이 HelloHello2를 참조하게 된다.

 

 

8. String 객체 기반 switch문 구성

· 원래의 switch문은 정수형이 대입되어야 하지만 아래 예시와 같이 str을 대입하는 경우 컴파일 오류가 발생하지 않는다.

  why? 문자로 인식하는 것이 아닌 참조하는 해당 주소를 가르키기 때문!

· ex)

 

 

9. String 클래스의 concat 메소드와 원리에 대해 설명하시오. 

Concat이란? 문자열과 문자열을 연결해주는 메소드이며, + 연산자를 이용하는 경우 컴파일러에 의해 concat 메소드가 이용된다.

 · ex)

문자열 + 숫자가 연산되는 과정에서 호출되는 함수의 원리는?

 · 문자열과 숫자를 연산했을 때, 숫자는 valueOf 함수와 concat 함수를 통해 컴파일되어 문자열로 자동 변환된다.

 · ex)

 

10. String 클래스의 substring 메소드에 대하여 설명하시오.

· substring 메소드는 해당되는 문자열을 반환시키며, 인자값을 한 개 혹은 두 개를 받는 형태로 사용이 가능하다.

· substring(n): 입력된 숫자(n)을 index 기준으로 그 이후의 문자열을 반환한다.

· substring(n1, n2): 입력된 숫자(n1)을 index 기준으로 시작하여 (n2-1)까지의 문자열을 반환한다.

 

11. String 클래스의 compareTo 메소드에 대하여 설명하시오.

· compareTo 메소드는 두 개의 문자열을 비교하고 정수값을 리턴한다.(대소문자까지 비교)

· st1.compareTo(st2) 의 경우 st1의 객체를 기준으로 사전상의 위치를 비교한다.

  (st1=st2이면 0을 반환,  str1>str2이면 양수를 반환,  str1<str2이면 음수를 반환)

  (쉽게말해 str1(90p)이 str2(100p)보다 사전상 앞에 위치하는 경우 음수를 반환)

· compareToIgnoreCase는 compareTo와는 다르게 대소문자를 신경쓰지 않고 비교하여 정수값을 리턴한다.

 

12. String 클래스의 valueOf 메소드에 대하여 설명하시오.

· valueOf는 기본 자료형을 문자열로 변환시켜 저장시키는 메소드이며, 데이터 타입마다 코딩이 되어있기 때문에 호출하여 사용이 가능하다.

· ex)

13. StringBuilder와 String의 차이는?

· String은 원래의 값을 변경할 수 없는 Immutable의 특성을 가지고 있어 계속적으로 인스턴스를 생성하지만,

 반대로 StringBuilder는 Mutable의 특성을 가지고 있어 하나의 객체를 생성하고 중간 인스턴스를 생성하지 않는다.

 (즉, 하나의 인스턴스를 참조하기 때문에 연산된 값에 계속적으로 연산되어 출력됨)

· String은 매번 새로운 인스턴스를 생성하기 때문에 추가 혹은 삭제되는 내용이 적을 때 주로 사용되고,

  StringBuilder는 for문과 같이 계속적으로 인스턴스가 생성되어야 하는 경우 사용된다.

· cf) StringBuilder와 StringBuffer의 공통/차이점

  : 메소드의 기능과 수, 메소드의 이름과 매개변수의 선언은 동일하다.

  : StringBuffer는 StringBuilder에 비해 스레드에 안전하지만 스레드의 안전성이 불필요한 경우 StringBuffer를 사용하면

   성능 저하만 유발하기 때문에 그 때는 StringBuilder를 사용한다.(스레드의 안전성 차이)

 

 

14. 콘솔 입력과 출력

※문자열의 조합

 ·  printf 메소드는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.(f는 포맷을 의미)

 · ex) 따옴표 안에 %d = 12, %f = 24.5, %c = A를 순서대로 대입하여 출력

 

콘솔 입력

· Scanner 클래스의 인스턴스 생성은 데이터를 가져올 대상과의 연결을 의미하며, 콘솔창에 입력만하면 출력이 가능하다.

 

 

'bitcamp > JAVA' 카테고리의 다른 글

배열  (0) 2021.01.17
기타_연습문제  (0) 2021.01.17
클래스 변수와 메소드  (0) 2021.01.10
기타_연습문제  (0) 2021.01.10
접근제한자와 캡슐화  (0) 2021.01.10