JVM이 최초로, 가장먼저 호출하는 메소드 -> 메인 메소드
º 객체들은 서로 다른 상태를 가지는데, static으로 설정해주지 않으면 모든 변수들이 같은 값으로 정의 되기 때문에 static의 성질을 이용하여
º static 공간에 공통된 값을 지정해주고 공유한다는 형식의 개념
º 상태와 무관하다
º 클래스 이름으로 접근해야 한다(가독성)
º static 블럭은 자바가 실행될 때 가장 먼저 읽힌다 -> 실행문이 있으면 메인 메소드 보다 먼저 출력됨
º 먼저 초기화 하고 싶은 작업이 있다면 static 블럭 안에서 해결
º 각 인스턴스들은 서로 독립적기 때문에 서로 다른 값을 유지한다. (객체지향의 원리)
º 경우에 따라서는 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우 static을 붙인다.
클래스 변수 = static 변수 = 공유변수
인스턴스를 달리 생성해 주지 않아도 클래스이름으로 바로 접근이 가능하다
abs 메소드와 같이 단순 기능을 하는 메소드를 static으로 설정해두고 필요에 따라 공유해서 사용
final class -> 변하지 않는 마지막 클래스
º final method -> 변하지 않는 마지막 메소드( 상태가 변하지 않는다는 의미라서 오버라이딩이 불가능하다)
º 변수를 그대로 사용해야한다
º 상수는 소문자로 나타낸다
abstract class Abstract { //추상클래스
abstract void move(); //move의 추상 메서드
}
추상 메서드에는 구현부(내용이)없다 즉 메소드 바디가 없다는 뜻의 미완성의 의미를 가진다
º 인스턴스 생성이 불가하다->추상 클래스에는 메소드 바디가 없으므로 빈 껍데리를 가져올 수 도 있기 때문에 생성이 불가
(오버라이딩을 통해서 메소드가 명시되기 때문이다)
즉 조상 클래스의 개념(조상이 있어야 자손이 있듯이)
º 자손 클래스에서 하나라도 오버라이딩 하지 않으면 clsss 앞에 반드시 abstract 명시한다
º 공통요소->abstract=추상화 위로 갈수록
º 내려 갈수록 구체화
overriding 기술이 강제적이 되고, class명 앞에도 추상화 된 것이라고 명시해준다. why? 추상화 하여 선언 부만 만들어 놓은 것이다 보니, 확장하여 overriding기술을 무조건적으로 적용하여 기능을 추가해야 추상화 하여 선언 부를 정의한 의미가 있기 때문이다.
• interface 와 abstract의 차이점
º abstract는 추상메서드를 선언하여 상속을 통해 자식 클래스에서 오버라이딩 하여 사용하도록 하는 클래스 이므로
º 미완성의 라는 의미를 가진다 상속을 위한 클래스이므로 객체 생성이 불가능 함
º interface는 기본설계도의 의미를 가진다 다른 클래스를 작성하는데 도움을 주는 목적
º 추상클래스는 상속관계를 따라 올라갔을 때 같은 조상 클래스를 상속하는데 기능까지 완벽한 똑같은 기능을 필요할때
== 상속을 받아서 기능을 확장시키는 것이 목적
º 인터페이스는 조상클래스를 상속하는데 같은 기능이 필요할 경우 인터페이스 사용
필요에 따라 결합하는 관계
잠시 사용하고 두고 가는 개념 (학원의 컴퓨터)
class A{
강의하다(){
B b = new B();
b.~;
}
}
class B{
• Association (has a ~) : 소유하는 개념 (개인 노트북)