자바 77

클래스 간의 관계, 상속과 포함

▶ 포함(composite) 이란? - 클래스의 멤버로 참조변수를 선언하는 것 ▶ 클래스 간의 관계 결정하기 상속관계 '~은 ~이다. (is-a)' 포함관계 '~은 ~을 가지고 있다. (has-a); Q. Point 라는 클래스가 있을 때 Circle 클래스를 만들 때 상속 or 포함? class Point { int x; int y; } >> 1번 포함 class Circle { Point c = new Point(); int r; } >> 2번 상속 class Circle extends Point { int r; } 모르겠을 땐 문장을 만들어보아라 1번 포함 : 원(Circle)은 점(Poitn)을 가지고있다. - Circle has a Point (O) 2번 상속 : 원(Circle)은 점(Poin..

상속

상속 (Inheritance) - 기존의 클래스로 새로운 클래스를 작성하는 것. (코드의 재사용) - 두 클래스를 부모와 자식으로 관계를 맺어주는 것. 상속으로 작성하는 방법 >> class 자식클래스 extends 부모클래스 { // extends : 키워드 // ..... } - 자손은 조상(부모의 부모)의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외) - 자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다.) 코드와 다이어그램 class Parent { int age; // 부모는 멤버 1개 } class Child extends Parent { } // 자신의 멤버 0개, 부모로 부터 상속받은 멤버 1개 ; 멤버 1개 - 자손의 변경은 조상에 영향을 미치지 않는다. 코드와 다이어그램..

No enclosing instance of type* is accessible 오류가 나는 경우

문제? TV 클래스를 생성해 static 함수에서 출력하려고 하는데 자꾸만 오류가 발생했다. 해결? static 함수에서 참조하려는 클래스가 닫혀 있어 접근을 하지 못한다는 오류이다. 보통 내부에 있는 클래스를 static 함수가 참조할 때 에러가 발생한다. 본인의 경우에는 Prac_01 함수 안에 TV 클래스를 작성해서 발생한 오류였다. 간단하게 Prac_01 함수 밖에 TV 클래스를 선언해주니 정상적으로 돌아오는 것을 확인 할 수 있다ㅋㅋ..

변수의 초기화, 멤버변수의 초기화

변수의 초기화 - 지역변수 (lv)는 수동 초기화 해야함 (사용전 꼭!!!) - 멤버변수 (iv, cv)는 자동 초기화된다. (초기화 되는 값은 타입 마다 다름) > int j = i; 를 하려고 할때 i의 값이 뭔지 모르기 때문에 이슈 발생 >> 왜 모르나? - 호출 스택이 (계속 쌓였다 없어졌다) 재사용이 빈번한 메모리 - 메서드가 호출 될 때마다 공간을 0으로 초기화 하면 성능이 떨여져, 새로운 값으로 덮어쓰는 방식을 사용함 (=초기화) - 그렇기 때문에 값을 모름 멤버변수의 초기화 (iv, cv) 1. 명시적 초기화 (=) (대입연산자) (선언식) class Car { int door = 4; // 기본형 (primitive type) 변수의 초기화 Engine e= new Engine // 참조..

생성자 this(), 참조변수 this

생성자 this() - 생성자에서 다른 생성자 호출할 때 사용 - 다른 생성자 호출 시 첫 줄에서만 사용가능 >> - 1,2 의 매개변수를 3에서 호출함 - Car2 가 아닌 this를 사용함` - 같은 클래스 안에 있는 생성자들 끼리 호출 할 때는 class 이름 대신 this 를 사용함 (규칙) - 1,2 의 생성자는 모두 iv 초기화 하는 역할을 함 - 오버로딩 할 때, 이름이 같은 메서드들은 하는 일이 같은 경우에 이름을 같이 줌 > 코드 중복을 제거하기 위해 생성자들 끼리 서로 호출 하는 일이 많음 > 이때 this()를 사용함 > 코드 중복을 막기 위해 this()를 사용하여 코드 변경함 >> color = white, gearType = auto, door = 4 로 변경됨 참조변수 this..

생성자, 기본 생성자

생성자 ( constructor) ( = iv 초기화 메서드) - 인스턴스가 생성될 때마다 호출되는 '인스턴스 (=객체) 초기화 메서드 = iv 초기화 - 이름이 클래스 이름과 같아야한다 Class Card { // 클래스 이름 = 생성자 이름 ... Card () { // 매개변수 없는 생성자 // 인스턴스 초기화 작업 } => 생성자 오버로딩 Card (String kind, int number) { // 매개변수 있는 생성자 // 인스턴스 초기화 작업 } } - 리턴값이 없다. (void 안 붙힘) -> 반환값이 없기 때문에 - 모든 클래스는 반드시 생성자를 가져야 한다. (1개 이상의 생성자) 기본 생성자 (default constructor) - 매개 변수가 없는 생성자 - 생성자가 하나도 없을..

Static 메서드와 인스턴스 메서드

Static 메서드와 인스턴스 메서드 -> iv 사용여부에 따라 갈림 Class MyMath2 { long a, b; // -> 인스턴스 변수 : iv long add() { // 인스턴스 메서드 (iv 사용) return a + b; // iv } static long add (long a, long b // -> 지역변수 : lv) ) { // 클래스 메서드( = static 메서드) (iv 사용X) return a + b; // lv } } 인스턴스 메서드 - 인스턴스 생성 후, '참조변수.메서드이름()'으로 호출 - 인스턴스 멤버 (iv, im)과 관련된 작업을 하는 메서드 - 메서드 내에서 인스턴스 변수 (iv) 사용가능 Static 메서드 (클래스 메서드) - 객체생성없이 '클래스 이름.메서드..

기본형 매개변수

기본형 매개변수 > 기본형 매개변수 (8개) - 변수의 값을 읽기만 할 수 있다. (read only) -> 변경 불가 ex) Class Data { int x; } Class Ex6_6 { public static void main (String[] args) { Data d = new Data(); // 참조변수 d 만든 후 new Data 객체 생성 d.x = 10; System.out.println(" main() : x = " + d.x); // d.x = 10 change(d.x); // change 메서드 호출 System.out.println ( "After cahnge (d.x)" ); System.out.println ("main() : x = " + d.x); } Static void..

호출 스택 (call stack) - 중요!

호출 스택 (call stack) 스택 (stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다. >> 특징 스택은 위에 뚫린 부분으로만 넣거나 뺄 수 있고, 1번과 2번사이에 껴넣기, 1번을 먼저 꺼내는 것은 할 수 없다. 메서드 수행에 필요한 메모리가 제공되는 공간 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제 >> 1. main 메서드 실행 상태 2. main 이 println 를 호출 3. main은 대기 상태 , println 실행 상태로 변경됨 4. main은 println 메서드가 끝날 때 까지 기다려야함 5. println 이 종료되면 stack에서 사라짐 6. main 메서드가 다시 실행 상태로 변경됨 >> 아래 있는 메서드가 위의 메서드를 호출한 것 >> 맨 위의 메서드 하나..