[F-lab 모각코 챌린지 11일차] TIL

JeongheeKim·2023년 6월 11일

TIL

목록 보기
11/66

학습계획

  • 참조자료형 학습
  • 참조자료형 연습문제 풀기

Reference 타입 - 참조 자료형

참조자료형이란?

기본 자료형 이외의 자료형 타입.

참조 자료형은 생성자를 통해 생성하는데 없을경우 컴파일 시 자동으로 기본생성자를 만들어준다.

public class Test {
	public Test() {}

	public static void main(String[] args) {
		Test test = new Test();
	}
}

단, 다른 매개변수를 받는 생성자가 있다면 기본생성자를 자동으로 만들어주지 않으므로 따로 생성해야한다.

public class Test {
	public Test() {}
	public Test(String str) {}

	public static void main(String[] args) {
		Test test = new Test();
	}
}
  • 메서드와 생성자를 어떻게 구분하나?
    • 생성자는 리턴타입이 없고, 클래스 이름으로 되어있다.

참조 자료형의 초기화

new키워드를 통해 초기화 한다.

Caculator caculator = new Calculator();

예외 케이스로 String 초기화 시에는 String test = “test”;와 같이 초기화 한다. String은 참조자료형 생성방법과 동일하게 String test = new String(”test”); 도 가능하지만 리터럴 방식을 사용한다.

또한 참조자료형이 사용할 수 있는 연산자로는 =뿐이지만 예외로 String은 + 연산을 사용할 수 있다.

this

this예약어는 매개변수와 객체필드명이 동일할때, 이 객체가 가진 필드라고 알려주는 예약어이다. 이는 컴파일러에게도 어떤 필드인지 정확하게 알려주는 역할을 한다.

public class Person {
	private int seq;
	private String name;
	
	public Person(int seq, String name) {
	    this.seq = seq;
	    this.name = name;
	}
}

method overloading

  • 메소드의 이름이 같지만, 매개변수만을 다르게 하여 정의하는것을 오버로딩이라 한다.
    • 매개변수의 개수가 같아도 타입의 순서가 다르면 다른 메소드로 인식된다.
    • 메소드 오버로딩의 모토 : 같은 역할을 하는 메소드는 같은 메소드 이름을 가져야 한다.
    • 자바의 대표적은 메소드 오버로딩 예시
      • System.out.println() : 매개변수가 다양한 타입을 print하는 동일한 역할을 다양한 매개변수 받는 메소드로 오버로딩 하였다.

        Untitled

메소드에서 값 넘겨주기

  • 메소드가 종료되는 조건
    • 메소드의 모든 문장이 실행되었을 때
    • return 문장에 도달했을 때
    • 예외가 발생했을 때

static 메서드

  • static 메서드는 객체를 생성하지 않아도 메서드를 호출 할 수 있다.
  • 단, static메소드는에는 클래스 변수만 사용할 수 있다.
  • static은 GC의 대상이 되지 않는다. Collection객체를 static으로 선언하면 지속적으로 객체가 쌓여 OutofMemory가 발생할 수 있다. 더이상 사용할 메모리가 없을 경우 메모리 릭(leak)이 발생한다.
  • static 블럭
    • 객체가 생성 되기전 한번만 호출된다.
    • 클래스 내에서 선언되어야 하고, 메소드 내에서는 선언 할 수 없다.

Pass By Value, Pass By Reference

  • 기본 자료형은 매개변수로 전달될때 값만 전달한다.
  • 참조자료형은 참조값을 전달한다.
    public class ReferencePass {
    	public static void main(String[] args) {
    		ReferencePass referencePass = new ReferencePass();
    		referencePass.callPassByValue();
    	}
    	public void callPassByValue() {
    		int a = 10;
    		String b = "b";
    		System.out.println("before passByValue");
    		System.out.println("a = " + a);
    		System.out.println("b = " + b);
    
    		passByValue(a,b);
    		System.out.println("after passByValue");
    		System.out.println("a = " + a);
    		System.out.println("b = " + b);
    	}
    	private void passByValue(int a, String b) {
    		a=20;
    		b="z";
    		System.out.println("in passByValue");
    		System.out.println("a = " + a);
    		System.out.println("b = " + b);
    	}
    }
    before passByValue
    a = 10
    b = b
    in passByValue
    a = 20
    b = z
    after passByValue
    a = 10
    **b = b**
    • String 참조자료형은 값이 변경되지 않았다. b="z"; b= new String(”z”);와 동일하므로 다른 객체로 대체된것이다.
    • 기본 자료형은 값에 의한 전달이므로, 호출 전 후의 값이 변경되지 않는다.

연습문제

  • 생성자는 반드시 만들어야 하나요?
    - 생성자가 반드시 없어도 되는 static메서드가 있다.

  • 만약 매개변수가 있는 생성자를 만들고, 매개변수가 없는 기본 생성자를 호출하면 어떻게 될까요?
    - 기본생성자를 만들어줘야한다.

  • 생성자의 개수는 제한이 있나요?
    - 없다.

  • 인스턴스의 변수와 매개변수나 메소드 내에서 생성한 변수와 구분하기 위해서 사용하는 키워드는 무엇인가요?
    - this

  • 메소드 선언시 리턴 타입으로 지정한 데이터를 넘겨줄 때 사용하는 키워드는 무엇인가요?
    - return

  • 메소드 선언시 아무 데이터도 리턴 타입으로 넘겨주지 않겠다는 것을 지정하는 키워드는 무엇인가요?
    - void

  • 메소드 선언에 static 이 있는 것과 없는 것의 차이는 무엇인가요?
    - static메서드는 객체를 꼭 생성하지 않아도 호출하여 사용할 수 있다.

  • 필자가 엄청나게 중요하다고 한 것 중 메소드의 이름은 같으나 매개변수를 다르게 하는 것의 명칭은 무엇인가요?
    - 메소드 오버로딩

  • 기본 자료형을 매개변수로 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?
    - Pass by value

  • 참조 자료형을 매개변수로 넘겨 줄 때 Pass by value인가요? 아니면 Pass by reference인가요?
    - Pass by reference

  • 매개변수의 수가 가변적일 때 메소드 선언시 타입과 변수 이름 사이에 어떤 것을 적어줘야 하나요?
    - ...을 적어줘야하며 띄어쓰기 하면 안된다.

0개의 댓글