20.03 ~ 20.08 국비교육 83

클래스 상속관계에서의 생성자

1)순서(실행, 변수 초기화) : 상속관계에서 생성자는 상위 클래스 생성자부터 실행된다. 즉, 실행과 변수 초기화 모두 상위클래스부터 시작한다. 상속관계에서는 최초의 부모 클래스가 있기 때문에 하위 클래스가 있을 수 있다는 확장의 개념으로 접근하는 것이 좋다. 바로 위의 상위 클래스를 호출하면(명시적 호출), 그 상위 클래스의 생성자도 자동 호출된다.(암시적 호출) 연결이 끊어지면 바로 위 생성자 자동 호출한다. 2)기본 생성자의 필요성 :인자가 있는 생성자가 있는 경우는 기본 생성자가 자동으로 만들어지지 않기 때문에 오류 뜨기 십상 기본 생성자는 습관적으로 만들기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ..

상속, 오버라이딩(Overriding)

: 상위 클래스의 자원을 하위 클래스에서 받아 쓰는 것. 하위 클래스 본래의 멤버에 상위 클래스의 멤버가 추가되기 때문에 하위 클래스의 범위가 더욱 크다. 상위 클래스에서 확장된 클래스다. 단, 자바는 다중상속(동시에 여러 개의 클래스에서 상속 받음)을 금지한다. -> 모호성 발생 상위 클래스는 하위 클래스의 자원을 쓸 수 없다★ = 재정의 상위 클래스에 정의된 메소드를 하위 클래스에서 상속받은 뒤, 재정의하는 것. 즉, 상위 클래스에서 하던 일이 하위 클래스에 가서 바뀐다. 객체지향의 다형성이라는 특징을 나타낸다. 1)상속일 때 이루어진다. 2)원형(prototype: 선언, declare)이 동일해야 한다. -> {괄호: 정의(statement)}시작하기 전까지 완벽히 같아야 한다. 3)특히, 반환형..

Garbage collection

1)참조되지 않는 힙 영역의 메모리(멤버 변수)를 가상머신(JVM)이 자동으로 수거하는 기능 -> 멤버 변수가 사용되지 않을 때(참조되지 않을 때) 자동으로 수거된다. ex. Hi hi = new Hi(); hi.a = 100; hi = null; ---> gc대상으로 등록됨(null값으로 초기화되면 hashcode 끊기고 참조가 안 되니까) *Heap 메모리 안 영역 eden - survivor - tenure(가비지 컬렉션 일어나는 영역) - permanent generation 2)gc는 우선순위가 낮으며, 주로 모든 스레드(thread) 실행이 끝나고 여유가 생기면 실행된다(수거한다). System.gc(); ---> 강제수거명령. 직접 수거명령을 내리기 전까지는 jvm이 알아서 처리한다. 3)강..

접근제한자

: 객체 지향의 은닉화 기능을 수행 1)(완전폐쇄) private -> 같은 클래스 안에서 사용 가능 2)(동일폴더패키지) 아무것도 안 붙음(friendly) -> 같은 패키지 안에서 사용 가능 3)(상속) protected -> 다른 패키지, 상속 관계에서 사용 가능 4)(완전개방)public -> 전혀 관계 없는 다른 패키지의 클래스에서 사용 가능 : 데이터(변수값) 보호의 목적으로 사용된다. 변수 직접 호출하는 것이 금지된다. -> 직접 접근하지 못하기 때문에 다른 public 메소드를 시켜서 가져온다.(간접 접근법) ex. setter, getter -> 동일 클래스 내부 멤버끼리는 접근 제한자가 무시되기 때문에 private 데이터에 접근할 수 있다★ -> private 뒤에는 반드시 접근 가능..

생성자의 생략, 코드 중복

생성자가 정의되어 있지 않으면, 기본생성자(인자가 없는 생성자)가 자동 생성된다. 그러나, 인자가 있는 생성자가 이미 존재하는 경우, 기본 생성자가 자동 생성되지 않기 때문에 무의식 중에 기본생성자를 호출해버리면 오류가 발생하게 된다. 습관적으로 기본생성자를 정의하자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 public class School2 { int kuk = 0; int eng = 0; int tot = 0; //기본생성자의 생략 public int hap() { tot = kuk + eng; return tot; } } public class SchoolMain2 public static void main(String[] args) ..