Java 81

패키지, 클래스 패스

▶ 패키지 (package) - 서로 관련된 클래스의 묶음 - 클래스는 클래스 파일 (*.class) 패키지는 폴더. 하위 패키지는 하위 폴더 - 클래스의 실제 이름(full name)은 패키지를 포함. (java.lang.String) rt.jar는 클래스들을 압축한 파일 (JDk 설치경로 \jre\ilb에 위치) ▶ 패키지의 선언 - 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언 - 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다. - 패키지 선언이 없으면 이름없는 (unnamed) 패키지에 속하게 된다. package com.codechobo.book; // 패키지 선언 public class PackgeTest { // 클래스 1 ( com.codechobo.book; 패키지에 ..

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

▶참조변수 super ( ≒ this. lv와 iv구별에 사용) - 객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자)내에만 존재 (= static 메서드내에 사용불가) - 조상의 멤버를 자신의 멤버와 구별할 때 사용 class Ex7_2 { puvlic static void main (String args[]) { Chihld c= new Child(); c.method(); } } class Parent (int x = 10; /* super.x */ } class Child extends Parent { int x = 20; // this.x void method() { System.out.println("x =" + x); System.out.println("this.x =" + this.x..

오버라이딩

▶(메서드) 오버라이딩 (overriding) - 상속받은 조상의 메서드를 자신에 맞게 변경하는 것 class Point { // 2차원 좌표 int x; // 위치 int y; string getlocation() { return "x:" + x + ", y :" + y; // 점의 위치값을 문자열로 만들어서 반환하는 getlocation 메서드 } } class Point3D extends Point { // 3차원 좌표상의 한 점 int z; string getlocation() { // 오버라이딩 return "x:" + x + ", y :" + y + ", z :" + z; // 선언문변경 불가, 내용(구현부.{})만 변경 가능 } } ▶오버라이딩의 조건 1. 선언부가 조상 클래스의 메서드와 일..

단일상속, Object클래스

▶ 상속 (Single Inheritance) - Java 는 단일 상속만을 허용한다. (C++은 다중상속 허용) class TVDVD extends TV DVD { // 에러. 조상은 하나만 허용된다. // .... } - 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다. ▶ Object 클래스 - 모든 클래스의 조상 - 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다. - 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다. toString(), equals(Object obj), hashCode()...

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

▶ 포함(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) - 매개 변수가 없는 생성자 - 생성자가 하나도 없을..