단일상속 java는 단일상속만 허용한다. (C++ 은 다중상속 허용) class TvDVD extends Tv, DVD { //에러 조상은 하나만 허용된다. } Tv와 DVD 의 메서드가 void power() 로 같고 내용이 다르다고 할 때 TvDVD가 상속받을 때 충돌이 일어난다. 그래서 자바는 다중상속을 하지않고 단일 상속으로 사용이 가능하다. 인터페이스를 이용하면 이러한 충돌문제를 해결하며 다중상속 효과를 낼 수 있게 한다. 인터페이스를 사용하지 않고 다중상속을 작성하는 방법 ▶ 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함 관계로 한다. TvDVD 클래스는 Tv를 상속한다. DVD 클래스는 객체를 생성하고 메서드 선언을 하여 사용을 하게 한다. 이렇게 하면 다중상속과 같은 효과를 나타낼 ..
포함관계 ▶ 포함(composite)이란? - 클래스의 멤버로 참조변수를 선언하는 것 - 작은 단위로 클래스를 만들고 이것을 조합해서 클래스를 만듬 [ Circle 클래스가 Point를 포함하는 관계 ] 클래스의 멤버로 참조변수. 다른 클래스타입의 변수를 선언하고 그 타입의 객체를 만들어준다. 클래스 간의 관계 결정 ▶ 상속관계 ~은 ~이다 (is - a) ▶ 포함관계 ~은 ~을 가지고 있다. (has-a) 1. (포함) 2. (상속) class Point { int x; int y; } 메모리구조
상속 (Inheritance) 1. 기존의 클래스로 새로운 클래스를 작성하는 것 ( 코드의 재사용 ) 2. 두 클래스를 부모와 자식으로 관계를 맺어주는 것 객체지향프로그램에서 부모클래스(상위)에서 자식클래스(하위)에게 물려줄 수 있다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다. B b = new B(); b.field1 = 10; b.method1(); b.field2 = "홍길동"; b.method2(); 클래스 상속 class 자식클래스 extends 부모클래스 { //필드 //생성자 //메서드 } 자손은 조상의 모든 멤버를 상속받는다. ( 생성자, 초기화블럭제외 ) 자손의 멤버개수는 조상보다 적을 수 없다. (같거나 많다.) 부모의 변경은 자손..
1. 패키지 자바에서는 클래스를 체계적으로 관리하기 위해 패키지(package)를 사용한다. 우리가 폴더를 만들어 파일을 저장 관리하듯이 패키지를 만들어 클래스를 저장 관리한다. 패캐지는 클래스를 유일하게 만들어주는 식별자 역할을 한다. 클래스 이름이 동일 하더라도 패키지가 다르면 다른 클래스로 인식한다. 클래스의 전체 이름은 "패키지명+클래스명"인데 패키지가 상, 하위로 구분되어 있다면 도트(.)를 사용해서 다음과 같이 표현한다. 상위패키지.하위패키지.클래스 Person 클래스가 com.mycompany 패키지에 속해 있다면 Person클래스의 전체 이름은 com.mycompany 폴더에 Person.class 가 위치한다. 클래스만 따로 복사해서 다른 곳으로 이동하면 그 클래스는 사용할 수 없기에 클..
final 필드선언 final 타입 필드 [= 초기값]; final 필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정 할 수 없다. 제어자 대상 의미 final 클래스 변경될 수 없는 클래스,확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 있다. 메서드 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. 멤버변수 변수 앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. 지역변수 ▶ 초기값을 줄 수 있는 방법 2가지 필드 선언시 주는 방법 생성자에게 주는 방법 public class Person{ final String nation = "korea"; final String s..
정적멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메서드를 말한다. 각각 정적필드, 정적 메서드라고 부른다. 정적멤버는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고 한다. 정적멤버선언 public class 클래스 { //정적필드 static 타입 필드 [=초기값]; //정적 메서드 static 리턴타입 메서드 (매개변수선언, ..) {..} } 정적필드와 정적메서드는 클래스에 고정된 멤버로이므로 클래스로더가 클래스(바이트 코드)를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다. ▷인스턴스필드 vs 정적필드 필드를 선언할때, 인스턴스 필드로 선언할 것인지 정적필드로..
인스턴스(instance) 멤버란 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메서드를 말한다. 각각 인스턴스 필드, 인스턴스 메서드라고 부른다. 스택영역에 생기는 변수인 지역변수는 개발자가 별도로 초기화하지 않으면 쓰레기 값을 갖게 된다. classArea(methodArea)과 Heap은 별도로 초기화해주지 않아도 정수형은 0, 부동소수점은 0.0, 논리형은 false, 객체는 null로 초기화 된다. 지역변수는 별도로 초기화해야 하는데 멤버변수는 왜 자동으로 초기화가 될까? 그것은 지역변수는 한 지역에서만 쓰는 변수이지만 멤버변수는 공유변수의 성격을 가지고 있기 때문이다. public class Car { //필드 int gas; //메서드 void setSpeed(int speed) {} ..