전체 글 119

추상 클래스(Abstract class) vs 인터페이스

추상 메소드를 포함하는 클래스 *추상 메소드: 선언만 있고(원형이 존재한다), 정의는 없는(내용이 없다: {}블록이 존재하지 않는다) 메소드 -> 일반 메소드도 포함할 수 있다. 한 개 이상의 추상 메소드가 있다면 추상 클래스로 본다. -> 추상클래스는 상속을 받아 사용된다. *콘크리트 클래스(상속받은 클래스, 하위 클래스): 딱딱한, 확고한, 내용이 있는. 추상 메소드를 재정의(오버라이딩) 해서 사용한다. -용도 클래스 설계시, 뼈대 및 설계도의 역할(상속은 거의 추상클래스의 형태로 나타난다) -추상 클래스 인스턴스 생성 1)추상 클래스 만으로는 인스턴스를 만들 수 없다: 상위 클래스-상위 생성자 불가(상-상X) 2)하위 클래스(콘크리트 객체)를 이용해 인스턴스를 만든다.(오버라이딩)★(하-하) 3)추..

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

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 뒤에는 반드시 접근 가능..