본문 바로가기

전체 글

자바의 정석 - 7.3 Object 클래스 7.3.1 Object 모든 클래스의 최상위 클래스 '상속을 받지 않은 클래스'는 자동으로 Object의 상속(extends)을 받음 모든 인스턴스가 가져야 할 기본적인 method 11개 정의(toString, equals) 💡 상속을 받은 클래스는 Object의 상속을 받지 않음 더보기
자바의 정석 - 7.2 단일상속 7.2.1 단일상속(single inheritance) java에서는 오직 단일상속만 허용 단일상속만 허용함으로서 코드의 신뢰성이 높아짐 7.2.2 상속과 포함으로 다중상속 상속과 포함을 같이 사용하여 다중상속처럼 만들 수 있음 class Tv{} class VCR{ void play(); void stop(); } class TVCR extends Tv{ VCR vcr = new VCR(); void play(){ vcr.play(); } void stop(){ vcr.stop(); } } 더보기
자바의 정석 - 7.1 상속 7.1.1 상속 기존의 클래스를 재사용하여 새로운 클래스 작성 확장(extends) class Child extends Parent{} 조상 클래스 : 부모(parent), 상위(super), 기반(base) 자손 클래스 : 자식(child), 하위(sub), 파생된(derived) 자식 클래스는 부모 클래스를 포함한다 자식 클래스는 부모의 모든 멤버를 상속받는다. 💡 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. 자식 클래스 멤버 개수는 조상 클래스 멤버의 개수보다 같거나 많다 💡 부모의 private역시 상속을 받지만, 접근 제한으로 접근을 못하는것 7.1.2 간접조상 직접조상 간접조상 : 자식 클래스가 상속을 받은 부모 클래스의 부모 클래스(조부모) 직접조상 : 자식 클래스가 상속을 받.. 더보기
자바의 정석 - 6.9 변수의 초기화 6.9.1 변수의 초기화 멤버변수(클래스 및 인스턴스 변수)는 타입에 맞게 자동으로 초기화가 되지만, '지역변수' 자동으로 초기화가 되지 않으므로 사용 전에 초기화가 필요하다. 6.9.2 멤버변수 초기화 방법 명시적 초기화(explicit initialzation) 생성자(constructor) 초기화 블럭(initialzation block) 인스턴스 초기화 블럭 : 인스턴스 변수 초기화 클래스 초기화 블럭 : 클래스 변수 초기화 6.9.3 명시적 초기화 선언과 동시에 초기화하는 방법 class Car{ int door = 4; } 6.9.4 초기화 블럭 인스턴스 초기화 블럭 인스턴스가 생성될 때마다 실행됨 생성자보다 먼저 실행됨 클래스 초기화 블럭 메모리에 클래스가 로딩될 때 한 번만 실행됨 clas.. 더보기
자바의 정석 - 6.8 생성자 6.8.1 생성자 인스턴스 초기화에 주로 사용되는 메서드 생성자는 클래스의 이름과 같아야 한다. 생성자는 리턴 값이 없다. 💡 생성자는 리턴값이 항상 없기 때문에 void를 생략해도 된다. 💡 new연산자를 통해 인스턴스를 생성하는 것이지, 생성자가 인스턴스를 생성하는건 아니다. Card card = new Card(); 1. 연산자 new에 의해 Card의 인스턴스가 heap영역에 생성된다. 2. 생성자 Card()가 호출되어 (초기화)수행된다. 3. 인스턴스 주소가 참조변수 card에 저장된다. 6.8.2 기본 생성자 컴파일러가 클래스 내부에 '생성자'가 없을 경우 자동으로 생성자를 만들어 주는 것이 기본 생성자이다. //컴파일 에러 class Data{ int value; class Data(int.. 더보기
자바의 정석 - 6.7 오버로딩 6.7.1 오버로딩 이름이 같은 메서드를 사용하고 싶을 때, 매개변수를 달리하여 선언 할 수 있다. 💡 반환 타입은 오버로딩에 영향을 줄 수 없다. 즉, 매개변수만 달리하여 오버로딩 가능 6.7.2 오버로딩 조건 메서드의 이름이 같아야 한다. 매개변수 개수 또는 타입이 달라야 한다. //타입이 같아 오버로딩이 '안되는' 예제 int add(int x, int y) int add(int a, int b) //반환 타입만 달라 오버로딩이 '안되는' 예제 long add(int a) int add(int a) //매개변수 순서가 달라 오버로딩이 '되는' 예제 long add(int a, long b) long add(long b, int a) 6.7.3 가변인자와 오버로딩 가변인자 (varargs): 매개변수.. 더보기
자바의 정석 - 6.6 클래스와 인스턴스 6.6.1 클래스 메서드와 인스턴스 메서드의 구분 메서드 앞에 static의 유무로 판단 가능 클래스 메서드 : static이 있음 인스턴스 메서드 : static이 없음 6.6.2 클래스 메서드 클래스가 메모리에 올라갈 때 static이 붙은 멤버는 자동 생성 인스턴스와 관계 없는 메서드를 클래스 메서드로 선언 객체를 생성하지 않아도 '클래스이름.메서드이름'으로 호출 가능 인스턴스 호출 불가 6.6.3 인스턴스 메서드 객체가 만들어질 때 heap영역에 생성 '인스턴스.메서드이름'으로 호출 가능 클래스, 인스턴스 호출 가능 6.6.4 사용 목적에 따른 클래스와 인스턴스 구분 모든 인스턴스가 공유를 하는것은 static을 붙여 클래스 메서드로 선언 클래스 변수는 인스턴스 생성하지 않아도 사용할 수 있다. .. 더보기
자바의 정석 - 6.5 재귀호출 6.5.1 재귀호출 한 메서드 내부에서 자기 자신 호출 값에 의한 호출(call by value)에 의해 독립적인 작업 수행 가능 무한 반복이 될 수 있으므로, 조건문과 함께 사용 구조적으로 간단하다. void recursive(n){ if(n ==1 ) ruturn; recursive(--n); } 💡 반복문과 유사하지만, 같은 반복 횟수에는 재귀호출이 매개변수 복사와 복귀 주소 저장문제 때문에 더 많은 비용이 사용된다. 6.5.2 재귀로출 에러 조건문과 같이 사용하지 않거나, 조건문에 의해 함수 종료가 원만하게 되지않을 경우 스택 오버플로우가 발생한다. int fac(int -1){ if(-1 == 1) return 1; return -1 * fac(n-1) //StackOverflowError 발생 } 더보기