23일 차 - this 함수, String 클래스 (23.01.27)

yvonne·2023년 1월 27일
0

📂Java

목록 보기
23/51
post-thumbnail

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

📌생성자에서 자기 자신의 메모리를 가리키는 this

Student s1 = new Student();
라는 인스턴스를 생성시켜서 this 를 사용한다면,
  • s1는 heap 메모리에 있는 해당 인스턴스의 주소값 참조.
  • this는 s1의 주소값을 똑같이 참조한다.
  • this는 하나의 클래스에 멤버변수명과 파라미터변수명이 같을 경우에 멤버변수를 가리키는 용도로 사용된다.
  • this.변수명 으로 접근한다.
class SimpleBox {
   private int data;

   SimpleBox(int data) {
      this.data = data;
   }
}


📌생성자에서 다른 생성자를 호출하는 this

class Person {
   private int regiNum;    // 주민등록 번호
   private int passNum;    // 여권 번호
   
   	Person(int rnum) { //1번
 	  this(rnum, 0);
	}
    
   	public Person(int rnum, int pnum) { //2번
		this.regiNum = rnum;
		this.passNum = pnum;
	}

   Person(int rnum) {
      regiNum = rnum;
      passNum = 0;
   }
  • Person class 에서 regiNum, passNum 멤버 변수를 선언한다.
  • 1번 : 생성자 안에 this() 처럼, 2번의 생성자를 호출하는 역할로 this를 사용할 수 있다.
    • 이때 this() 괄호 안에는 호출하는 생성자의 매개변수인 int rnum과 int pnum이 들어가야한다.
  • 2번 : 자기 자신을 가리키는 this 이다.
  • 호출을 위해 사용하는 this()는 항상 첫 문장으로 사용 되어야 한다.


2. this란 무엇인가?

  • this : 현재 클래스의 인스턴스를 의미하며, 현재 클래스의 맴버변수 (field) 를 지정할때 사용한다.

📌 This의 역할

  • 자기 자신의 메모리를 가리키는 역할을 한다.
  • 생성자에서 다른 생성자를 호출 하는 역할을 한다
  • 인스턴스가 자기 자신의 주소를 반환할 때 사용한다



3. String 객체를 생성하는 2가지 방법은?

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

① new 키워드를 통해 객체 생성

String str2 = "The Best String";

② new 키워드없이 큰따옴표 만으로 생성





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

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("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
 
if(str3 == str4)
System.out.println("str3과 str4는 동일 인스턴스 참조");
else
System.out.println("str3과 str4는 다른 인스턴스 참조");

  • 출력결과
  • 이유
    ① st1 / st2: String 함수는 ""를 이용하여 객체를 생성하면 Method Area에 한 번만 올라가기 때문에 여러 개의 참조변수가 하나의 String 인스턴스를 참조하게 된다.
    ② st3 / st4: 서로 다른 객체를 생성했기 때문에 다른 인스턴스를 참조




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

  • immutable: 변경할 수 없는, 불변의
  • immutable은 값을 변경할 수 없는 클래스를 의미한다.


6. String 이 immutable 에 대하여 설명하시오.

  • String 객체는 최초 한 번 생성되면 절대로 그 값이 변하지 않는다.
String str = "최초 문자열";
str = "변경된 문자열";
  • str 이라는 String 객체가 생성된 이후 "최초 문자열" 을 "변경된 문자열" 로 바꾼다고 해도 내부적으로는 최초 생성된 String 객체의 값이 변경되는 것이 아니라 새로운 String 객체가 생성되어 그 참조가 str 변수에 할당된 것.

  • String은 값을 바꾸는 것이 불가능할뿐더러 당연히 값을 바꾸는 메소드 또한 제공되지 않는다.

  • Java는 문자열을 표현할 때마다 생성되는 인스턴스의 수를 줄이기 위해 동일한 문자열로 구성되는 String 인스턴스의 수를 1개로 제한한다. 그리고 이를 통해 발생할 수 있는 문제를 방지하기 위해 String 인스턴스의 값 변경을 허용하지 않는다.



📌equals();

public static void main(String[] args) {
		String str1 = "Simple String"; // MA에 한번만 올라가서 공유됨
		String str2 = "Simple String";

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

		if (str1.equals(str3)) {  // 문자열이 동일한지 확인 
			System.out.println("str1과 str3는 동일 문자열");
		} else {
			System.out.println("str1과 str3는 다른 문자열");
		}
  • 출력결과

💡equals()와 ==의 차이

  • equals 메소드는 비교하고자 하는 대상의 내용 자체를 비교하지만,
    == 연산자는 비교하고자 하는 대상의 주소값을 비교한다.




7. abcde를 역순으로 화면에 출력하는 프로그램을 작성하시오.

String 객체에 있는 length() 와 함수와 charAt() 함수를 활용하시오.

class StringTest {
	public static void main(String[] args) {
		String str = "abcde";
		System.out.println(str.length());
		System.out.println(str.charAt(4));

		for (int i = str.length()-1; i > -1 ; i--) {
			System.out.print(str.charAt(i));
		}
	}
}

입력:abcde
출력:edcba


  • 출력결과
profile
개발 연습장

0개의 댓글