블로그 이미지
인간은 자신이 이해하지 못하는 것을 경멸하는 버릇이 있다. 셜병장

카테고리

분류 전체보기 (37)
주절주절 (1)
누리다 (1)
생활의 발견 (0)
Memory (1)
내 몸의 물 (8)
Developments (14)
Attraction (9)
Father Time (2)
Play Ground (1)
Total
Today
Yesterday

1. Constructor 와 Member Method의 차이점


 -. Constructor (생성자)란?

  •  객체 생성시 최초 생성되는  Method (인스턴스 초기화) - New 연산자로 최초 생성된다.
  •  Return 값이 없다. (메서드 자체에서 Return 되는 값이 없다.)
  •  Class와 동일한 이름을 사용해야 한다. 
	public class test {

		test(){ ...

		}

	}

  • 별도의 Constructor를 만들어 주지 않아도 Default로 생성된다. (이때 매개변수도 안에 내용도 없는 빈 생성자를 생성한다.)

      이는 컴파일러가 자동으로 추가하는 것으로 클래스내에 생성자가 하나도 없을때만 성립한다.

      매개변수가 존재하는 생성자가 해당 Class에 존재할시 컴파일 에러가 발생한다. 


 -. Constructor를 사용하는 이유?

생성자를 공부하면서 Java에서 생성자가 존재하는 이유에 대해 생각을 해보았다.

우선 첫번째로 Java는 객체지향의 언어이다. 이는 객체를 중심으로 프로그래밍한다는 말로 존재하는 객체에 대해 정확한 정보가 중요하다.

Instance로 객체를 생성할때 객체 안에 존재하는 정보가 정확하지 않다면 그 객체를 참조 또는 사용하는 많은 부분에서 정확한 데이터가 전달되지 않을것이다.

결론은 Java의 Constructor는 이런 객체의 정확한 정보 전달을 위한 Initialization (초기화)를 기반으로 두고 있는것으로 생각된다.

생성자는 정확한 데이터를 가진 정보를 초기화하는 책임이 있는 것이다.

예로 "Dog"라는 객체를 생성할때 쌩뚱맞게 "Wing"(날개)라는 정보가 객체안에 포함되어있다면 "Dog"를 사용하는 모든 클래스에서는 "날개를 단 강아지"라는 정보로 운용되는 일이 발생할것이다. 


 -. Constructor와 Method의 차이점은?

  • Constructor는 반환값이 없다. (type은 기본적으로 void이지만 생량되어서 표기된다.)
  • Class가 생성되기 전에 미리 초기화하여 먼저 생성된다.
  • New가 호출될때 인스턴스당 단 한번씩만 호출된다.


-. Constructor에 static을 선언?

  •  생성자 선언시 초기화 Block으로 static type 생성 가능하다.
	public class staticTest{

		static{

			...

		}

	}

  • 이외에도 static factory method를 생성자 대신 사용 가능하다.



-. static factory method란?

  • 일반적인 Constructor
	public class constructorTest{

		constructorTest(){

			...

		}

	}
  • static factory method로 변경시
	public class constructorTest{

		private static final constructorTest INS = new constructorTest();



		constructorTest(){

			...

		}

		public static constructorTest getInstance(){

			return INS;

		}

	}


  • 대표적인 예 - Calendar

Calendar는 Calendar ca = Calendar.getInstance();로 호출

이는 호출할때마다 매번 생성자를 호출하지 않고 static으로 이미 생성된 Instance를 사용할수 있다는 장점이 있다.


해당 static Instance는 Class가 Load될때 JVM 의 Method 영역에 미리 저장된다. 

일반적으로 Heap에 저장되는 Instance와는 다르며 Instance를 생성할때 (New사용) 생성자보다 더 먼저 호출된다.

단 , 해당 Class가 상속받은 Class일시 Parent의 생성자가 먼저 호출된다.




Posted by 셜병장
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함