이클립스 70

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

▶ 포함(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..

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 메서드가 다시 실행 상태로 변경됨 >> 아래 있는 메서드가 위의 메서드를 호출한 것 >> 맨 위의 메서드 하나..

Return 문, 반환값

return 문 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아간다. void printGugudan (ing dan) { if ( !(2 조건문이 참일때는 return 이 있으나 거짓인 경우에 return문이 없음 그래서 else를 추가해 거짓을 때 실행 하는 것을 넣어주어야함 구구단 메서드 만들어서 출력해보기 class Ex6_4 { public static void main(String args[]) { MyMath mm = new MyMath(); mm.printGugudan(3); // 구구단 3단을 출력 } } class MyMath { void printGugudan (int dan) { for (int i=1; i b) { return a; // 조건식이 참일때만 실행 } else{ re..