본문 바로가기

자바

Day06

setter 와 getter의 사용 이유 : 객체 데이터를 외붸서 읽고 변경 시 객체의 무결성이 깨질 수 있기 때문 그래서메소드를 통해 데이터를 변경하는 방법을 선호한다. 

setter :  외부에서 메소드를 통해 데이터에 접근하도록 유도한다.(매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문에) - 이런 역활이 메소드 setter

getter : 외부에서 객체의 데이터를 읽을 때도 메소드를 사용 [메소드로 필드값을 가공 후 , 외부로 전달한다]-이런 역활이 메소드 getter

만약 필드 타입이 boolean일 경우, getter는 get으로 시작하지 않고 is 로 시작하는 것이 관례이다.

외부에서 필드값을 읽을 수만 있고,변경하지 못하도록 하려면(읽기전용) getter메소드만 선언하거나 ,setter 메소드를 private 접근 제한을 갖도록 선언한다.

변수의 초기화 , 초기화 블럭 -클래스 초기화 블럭,   인스턴스 초기화 블럭

클래스 초기화 블럭-static 사용 하고 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행된다.

인스턴스 초기화 블럭 -주로 생성자 사용,인스턴스 초기화 블럭은 모든 생성자 에서 공통으로 수행돼야하는 코드를 넣는데 사용한다. 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할때 마다 수행된다.

 

상속(inheritance) : 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 

조상 클래스 : 상속해주는 클래스 -> 부모[parent]클래스,상위[super]클래스, 기반[base]클래스 

자손 클래스 : 상속 받는 클래스 -> 자식[child]클래스, 하위[sub]클래스, 파생된[derived]클래스

ex) class A extends B {} // 클래스 A는 B의 자식 클래스가 되고 /자식클래스 extends 상위 클래스/명으로 작성한다.

-생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. // 접근 제어자가 private 또는 default인 멤버들은 상속되지 않는다기보다 상속은 받지만 자손 클래스로부터의 접근이 제한되는 것이다.

-자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 

클래스간의 관계 -포함관계 : 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것이다.

class Circle { int x, y ,r; // 원점의 x,y 좌표 , 반지름 r 
	Point c = new Point(); //Point 클래스를 재사용하여 Circle클래스에 작성한것
}
class Point { int x, y ;} // x,y : 각각좌표

클래스간의 관계 : ~is -a~ : 상속관계 / ~has-a~ : 포함관계 

자바에서는 오직 단일 상속만 허용한다. 둘 이상의 클래스로부터 상속을 받을 수 없다.

Object클래스 : 모든 클래스의 조상 - 상속계층도의 최상위에 있는 조상클래스이다. 

 

오버로딩 vs 오버라이딩[중요!!!!] : 오버로딩[overloading]은 기존에 없는 새로운 메서드를 정의하는 것(new)

오버라이딩[overriding]은 상속받은 메서드의 내용을 변경하는 것(change,modify)

오버라이딩의 조건 -이름이 같아야 한다. -매개변수가 같아야 한다. - 반환타입이 같아야 한다.

 

super : 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버와 같을때 super를 붙여 구별 할 수 있다.

 

다형성(polymorphism) : '여러 가지 형태를 가질 수 있는 능력' 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함. 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.

class Tv{ } // 부모 
class CaptionTv extends Tv{} //자식
CaptionTv c = new CaptionTv(); // CaptionTv 인스턴스 2개생성  
Tv t = new CaptionTv(); //  참조변수 t는 CaptionTv인스턴스 중에서 Tv클래스의 멤버(상속받은)들만 사용이 가능하다. 
// 둘 다 같은 타입의 인스턴스이지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.

** 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야한다. -클래스는 상속을 통해서 확장될 수는 있어도 축소될 수는 없어서, 조상 인스턴스의 멤버 개수는 자손 인스턴스의 멤버 개수보다 항상 적거나 같다. 

조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다. 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.

서로 상속관계에 있는 타입간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다. 그래서 참조변수가 가리키는 인스턴스의 타입이 무엇인지 확인하는 것이 중요하다!!!

 

'자바' 카테고리의 다른 글

Day08  (0) 2021.05.13
Day07  (0) 2021.05.13
Day05  (0) 2021.05.10
1주차 예제를 통한 간단한 복습  (0) 2021.05.09
Day04  (0) 2021.05.07