본문 바로가기

언어/JAVA

8장 참조자료형

기본자료형을 8개를 제외한 나머지타입은 모두 참조자료형이다.

기본자료형과 참조자료형의 가장 큰차이는 new를 사용해서 객체를 생성하는지 유무이다. (new없이 객체를 생성할 수있는 참조자료형은 오직 String뿐이다.)

참조자료형에서 사용할 수 있는 연산자는 = 밖에 없다(String은 +도 사용가능)

기본생성자

자바는 생성자를 만들지않아도 자동으로 만들어지는 기본생성자가 있다.

public class Reference{
	public static void main(String[] args){
    	Reference reference = new Reference();
    }
}

new옆에 Reference();라는 것이 생성자이며, 아무런매개변수가 없는 생성자는 다른 생성자가 없을 경우 기본으로 컴파일 된다.(다른생성자가 있을 경우에는 아무런 매개변수가 없는 기본생성자는 만들어지지않는다.)

자바의 생성자는 매개변수개수의 제한은 없고, 몇개를 만들어도 상관없지만 관리가 힘들어지므로 너무 많이 만드는 것은 좋지않다.

 

public class MemberDTO{
	public String name;
    public String phone;
    publid String email;
    
    public MemberDTO(String name){
    this.name = name
    }
}

this란 예약어는 말그대로 "이 객체"라는 의미이며, 생성자와 메소드 안에서 사용가능하다.

사용하는 이유는 매개변수와 인스턴스변수의 이름이 같을 때 혼동하지않도록 해주는 역할을 한다. 위와같이 this.name이라고 지정해주면, 매개변수안에 있는 name이 아닌 "이 객체의 name"이라 명시적으로 지정해주는 것이다.

 

메소드 또한 이름이 동일하고 매개변수만 다르게 여러개 선언할 수있다.

public class A{
	public void print(int data){
    }
    public void print(String data){
    }
    ...
}

 위와같이 메소드 이름을 같게하고, 매개변수만 다르게 하는 것을 바로 오버로딩이라한다.

overload란 다느어는 "과적하다, 지나치다, 너무 많은 부하를 주다"는 의미로 하나의 메소드 이름을 사용하면서 여러기능을 제공한다는 의미로 해석할 수도 있고, 하나의 메소드 이름으로 너무 많은 부하를 준다고 볼 수있다.

중요한 예시로 System.out.println()이있다. int나 String이나 다른 어떤 변수를 매개변수로 줘도 컴파일이 된다.

 

메소드

메소드는 이럴때 종료된다.

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

자바에서는 모든 타입을 한 개의 리턴타입으로 넘겨줄 수 있다.

public void example1(){
//void를 사용해서 메소드를 선언하면 return이 없고
//해당 메소드의 모든문장이 수행되면 종료된다.
	처리문장1
}

public int example2(){
//int값을 리턴이되어 요청한 메소드로 그 값이 전달된다.
//모든 기본자료형과 String을 사용할 수있다.
	int ii = 0;'
    return ii;
}

리턴문장 이후에는 if문에서 return경우를 제외하고 컴파일이 되지않기 때문에 주의해야한다.

 

static메소드는 일반메소드와는 다르게 객체를 생성하지않아도 바로 사용할 수 있다.

하지만 static메소드는 클래스 변수만 사용할 수 있다는 단점이 있다.

 

static 블록

클래스 객체는 여러개 생성하지만, 한번만 호출되어야하는 코드가 있다면 "static블록"을 사용하면된다.

static블록은 객체가 생성되기 전에 한번만 호출되고, 그 이후에는 호출되지않느다.

인스턴스변수나 클래스변수처럼 클래스 내에 생성해야한다.

public class staticblock {
	static {
    	//최초1번만 실행되어야할 처리문장...
        //ex)
        System.out.println("단짠단짠감자");
    }
    	static {
    	//위의 static블록이 처리된 후 해당블록 처리
        //ex)
        System.out.println("블로그정리 중~");
    }
}

 

 

 

 

 

'언어 > JAVA' 카테고리의 다른 글

10장 상속  (0) 2021.10.19
9장 패키지 / 접근제어자  (0) 2021.09.21
6장 조건문 / 반복문  (0) 2021.09.19
5장 연산자  (0) 2021.09.16
4장 변수 / 기본 자료형  (0) 2021.09.10