1) new 연산자를 사용할 때마다 메모리에 인스턴스가 생성합니다.
2) 인스턴스는 더 이상 참조되는 것이 없을 때, 가비지 컬렉션(Garbage Collection)이 됩니다.
3) static한 필드는 클래스가 로딩될 때 딱 한번 메모리에 올라가고 초기화됩니다.
4) 인스턴스 메소드(non-static)는 인스턴스를 생성하고 나서 레퍼런스 변수를 이용해 사용합니다.
5) 클래스 메소드(static)는 클래스명.메소드명()으로 사용가능합니다.
6) 메소드 안에 선언된 변수들은 메소드가 실행될 때 메모리에 생성되었다가, 메소드가 종료될 때 사라집니다.
*참고) 소스코드, 클래스 파일 자체는 정적
1) 동적인 것들은 실행되면서 생성되는 것이다.
2) 클래스 정보 자체는 정적이다.
중요한 것은 남기고, 불필요한 것은 제거한다.
ex)
신발 고객인 경우 : 신발 사이즈
찜질방 손님인 경우: 성별, 옷 사이즈
관련된 것들을 잘 모아서 가지고 있는 것
좋은 객체는 응집도는 높고 결합도는 낮다.
ex)
세탁기는 세탁과 관련된 기능을 잘 가지고 있어야 함(높은 응집도)
컴퓨터를 샀는 데 부가적인 장비가 있어야만 컴퓨터가 동작한다.(높은 결합도)
어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질
ex)
남자의 역할이 아내에게는 남편, 자식에게는 아버지, 부모님에게는 자식, 회사에서는 회사원, 동아리에서 총무 등 상황과 환경에 따라서 달라지는 것과 비슷
1) 메소드의 이름은 같고 매개변수의 개수나 타입이 다른 함수를 정의하는 것을 의미한다.
2) 리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다.
기존 클래스를 재사용하여 새로운 클래스를 작성하는 것
[접근제한자][abstract | final] class 클래스명 extends 부모클래스명{
.....
}
여기서 []안의 내용은 없어도 됨
아무것도 상속받지 않으면 자동으로 java.lang.Object를 상속받는다.
1) 메소드가 오버라이딩(overriding) 되면 무조건 자식의 메소드가 실행된다.
2) 부모 타입으로 자손 타입을 참조할 수 있다.
ex) Car car = new Bus();
3) 정보은닉은 객체지향의 중요한 기법이다.
ex) 중요한 필드는 은닉하고, 필드는 메소드를 통해서만 접근하도록 한다.