하나의 java file에 1개의 class를 두는 것이 원칙이며 혹여 두 개이상의 class를 두었다 하더라도 public class는 1개밖에 생성하지 못한다. 또한, public class와 java file의 이름은 동일해야 한다.
Stack Mem. - 지역변수가 올라가는 자리로 함수가 호출되면 함수 내의 지역변수가 쌓이게 되고 함수가 끝나면 없어진다.
Heap Mem. - new keyword를 통해 동적으로 allocate되는데 JAVA는 heap memory에서 안쓰는 부분들을 GC(Garbage Collector)가 알아서 제거한다.
c++과 동일하게 자신의 메모리를 가리키고 자신의 주소를 반환한다. <
생성자에서 다른 생성자를 호출할 때 사용하기도 한다. <
ex) 아래의 예에서 this("name",1);을 하게되면 파라미터를 가지고 있는 생성자를 호출하는 것과 같다.
public Person() {
this("name",1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
어떤 클래스가 단 1개의 인스턴스만 생성해야 하는 디자인 패턴으로 JAVA에서 많이 쓰인다.
public class Company {
// 회사는 단 1개만 있어야 한다. --> singleton pattern
private static Company instance = new Company(); // 유일하게 사용될 인스턴스.
private Company() { }
public static Company getInstance() {
if(instance == null) {
instance = new Company(); // 혹시나 null이 되면 다시 생성함.
}
return instance;
}
}
위와 같이 company 클래스의 인스턴스를 하나만 생성하고 생성자를 private으로 선언해서 추가로 생성하지 못하게 한다.
이렇게 되면 company라는 클래스를 외부에서 아예 접근하지 못하기 때문에 인스턴스를 호출할 수 있게 public static method로 getInstance()를 만들어 준다.
작년에 Spring 스터디를 할 때는 Java를 아예 모르는 상태에서 했기에 Singleton pattern이 익숙치 않았고 어색한 느낌이 강했다.
하지만 한 번 경험하고 나니 왜 이런식으로 코드를 작성해야하는지 이해할 수 있었다. 이제 절반정도 강의를 들은 것 같은데 왜 예전에 Java를 배우지 않았을까라는 생각이 들 정도로 재밌다. 잘 가르쳐주신 강사님께 감사드립니다!