위 글은 4/2(토)의 수업 내용을 정리한 것입니다.
더 자세한 내용은 https://www.facebook.com/groups/codingeverybody/posts/7530033737037097/ 을 참고해 주세요.
필드(field)
[접근 제한자] [static][final] 타입 필드명 [=초기값]
Person Class 작성하기
인스턴스를 생성한 후, 객체 p1이 갖고 있는 name, address, isVip를 출력해보았다.
String 클래스에 대해 알아보기
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
위의 공식 문서를 보자.
Object를 상속받았고, 생성자는 클래스의 이름과 같으니 String()으로 표현된다
String클래스의 메소드
공식문서처에 나타난 것처럼 많은 메소드가 있다.
그 중 length()에 대해 알아보자. 반환값은 int이고 String의 길이를 반환한다고 나타내어진다!
Person클래스에 static한 field 생성하기
위와 같이 static한 필드를 Person클래스에 생성했다.
PersonTest 클래스에 가서, count의 값을 출력해보자.
왜 그럴까? 이유를 알아보자!
위의 코드는 p1.count++, p2.count++; 와 같이 p1객체, p2객체의 count값을 따로 +1; 한 것같지만,
count가 Person클래스의 static한 필드이기 때문에, count변수는 Person클래스에 메모리가 따로 저장이 된다.
따라서 객체를 생성하지 않아도, count를 사용할 수 있다.
Person클래스에 메소드 추가하기
위의 두 개의 메소드를 비교해보자.
public void printName(){
System.out.println("내 이름은:" + name);
}
은 인스턴스 메소드이다.
즉, Person객체를 생성해야지 사용할 수 있다.
public static void printName(){
System.out.println("count:" + count);
}
은 클래스메소드이다. 인스턴스를 생성하지 않아도,
[클래스이름.메소드이름] 을 이용해서 사용 할 수 있다.
여기서 잠깐!
Person클래스에서 printCount()를 사용 할 때, name, address, isVip를 사용 할 수 있을까?
바로 확인해 보자.
왜냐하면 메모리가 생성되는 시점이 다르다.
재밌는? 놀이를 해보자
컴파일 순서
2번째 단계에서
1)CLASSPATH에서 Hello2를 찾는다
2)Hello2 클래스 자체에 대한 정보를 메모리에 올린다.
3)Hello2 클래스를 읽어주는 과정에서 static한 필드나 메소드가 있으면 사용 가능하게 메모리에 따로 올린다.
4) static한 필드는 static한 블록을 이용해 초기화 할 수 있다.
이해가 안되면 익숙해지자
추상화
책 [생각의 탄생]에 추상화와 관련된 내용을 캡쳐해본다.
내가 개발하고자 하는 영역에 맞도록, 추상화를 해야한다.
캡슐화
위와 같은 특징때문에 클래스이름을 잘 지어야 사용자의 혼란을 막을 수 있다.