
패키지란?
서로 관련된 클래스, 인터페이스들의 묶음 이다.
1. 충돌발생 방지 목적
2. 클래스들을 효율적으로 관리하기 위해 사용한다.
패키지명 : 소문자 사용 권장(원칙)한다.
import java.lang.*; 컴파일 할때 자동 추가
*의 의미 : java.lang 패키지 안의
모든 클래스를 가져오겠다.
import java.util.*; 이걸 쓰면 위에 사용된게 모두 포함되어서 편리는 하지만 내가 사용하지 않는 모든 클래스들이 다 import되므로
// 좋은 코딩은 아니다.
***다형성***
[다형성]? 다양한 성질
자바에서 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다.
(조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.)
다형성을 구현하는 기술 : 업캐스팅/다운캐스팅, 오버라이딩/오버로딩
- "여러 가지 형태를 가질 수 있는 능력"을 의미
각 객체에 맞춰서 코딩되는 것이 다형성이다.
예) 쉬는 시간에 사람(학생)들에게 화장실 갔다오세요(일/기능) 메서드
ㄴ 남학생(실체) - 남자화장실이용
ㄴ 여학생 - 여자화장실이용
예) 초등학교 산수 시험 시간
각[ 도형 ]의 면적을 구하세요(일/기능) 메서드
삼각형 - 1/2*가로*세로
사각형 - 가로*세로
원 - 반지름*반지름*PI
마름모 -
- 자바에서 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함드로써 다형성을 프로그램적으로 구현하였다.
-(조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.)
-예) 자바의 정석 354p
Tv 상위클래스(조상) CaptionTv 자식클래스라고 하다면
Tv t1 = new Tv();
Tv t1 = CaptionTv(); 가능하다는 소리이다.
사원들 정보 출력하세요 () - dispEmpInfo() 메서드를 호출
참조변수의 형변환(**중요**)
참조변수의 형변환은 참조변수의 타입을 반환하는 것이지 인스턴스를 변환하는 것은 아니기 떄문에 참조변수의 형변환은 인스턴스에 아무런 영향을 미치지 않는다.
단지 참조 변수의 형변환을 통해서, 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절하는 것 뿐이다.
Employee emp2 = new Regular("홍Kill동","서울 마포구","010-2345-4568","2019-03-05",300000);
위의 코딩은 아래 두개의 코딩이 합쳐진것이다.
Regular r = new Regular("홍Kill동","서울 마포구","010-2345-4568","2019-03-05",300000);
Employee emp = (Employee) r ; //업캐스팅
생략가능
참고) 참조형 변환 다운캐스팅에관한 중요한 사실
추상메서드
abstract 기타제어자를 붙여서 선언한 몸체가 없는 불완전한 메서드를 "추상메서드" 라고한다.
Why 추상 메서드를 선언하고 사용하는가?
예를 들어 설명해 보자.
처음에는 E(getPay() 가 없었다. -->R/S/T에만 getPay() 메서드가 있었다.
emp.getPay() 호출안된다.(Employee 클래스에는 getPay()메서드가 없기 떄문이다.)
getPay함수를 Employee 클래스에서 만들때 굳이 몸체는 필요가 없다.
어차피 자식 클래스에서 오버라이딩해서 다 수정해서 재정의(오버라이딩) 하기 때문이다.
이렇게 몸체가 필요없는 메서드를 만들때 abstract 키워드를 사용하는 것이다.
상속받은 자식클래스에서 재정의해라(재정의 해라 ==>오버라이딩해라)라는 의도로 만드는 것이다.
Employee - getPay() 급여 계산하는 메서드 정의 안함
Regular - getPay() <- SalesMan - 재정의 getPay()
Temp - getPay()
사원마다 급여 계산하는 방법이 다 다르기 때문에 제일 상위 클래스인 Employee에서 급여 계산 메서드를 만들지 않았다.
다형성 E=R, E=S, E=T
dispEmpInfo 호출 가능
getPay 호출 불가능
추상클래스도 클래스 업캐스팅 가능하다.
캡슐화
[캡슐화]
99% public 클래스 제외
멤버 - 이유? 데이터 보호
private int kor;
외부접근 X ->따라서 접근하기 위해서 getter, setter 선언
getter만 사용했다면 수정(변경) 못하고 읽기 전용!
setter만 사용한다면 0 ~ 100 this.kor = kor 유효한 값만 설정 할수 있도록 가능
싱글톤(Singleton.java)
// new Singleton(); 코딩에 의해 디폴트 생성자를 자동 호출한다.
// 컴파일러가 디폴트 생성자를 자동으로 추가 만약에 내가 생성자를 오버로딩한다면 컴팡일러가 디폴트 생성자를 추가하지 않으므로
// 내가 디폴트 생성자를 선언해줘야한다.
//Singleton s1 = new Singleton(); //자동으로 디폴트 생성자 호출하는 중이다.
//-private 생성자를 선언하면 new 클래스명() 객체(인스턴스) 생성을 못하게 하겠다.
//왜? 클래스 선언해 두고 왜 객체 생성 못하게 막느냐?
// 추상클래스라면 미완성된클래스기 때문에 객체 생성을 막는 것은 이해가 됩니다.
//근데 클래스도 미완성된것도 아닌데 굳이 private를 써서 객체 생성을 맞느냐??왜!!!!!!!!!
// ㄴ객체를 1개만 생성하겠다.는 의도이다.
//예) 반 - (반장,반장,반장,반장...)야간자율학습(30명) 조퇴
// 반 - (반장) 야간자율학습(30명) 조퇴 관리를위해 반장이라는 객체를 1개만 생성하겠다.
//코딩을 하다보면 객체를 1개만 생성해야할 경우가 있다. 이걸 싱글톤(Singleton) 이라고 한다.
// 자바 어플리케이션 -- 데이터베이스 연동 CRUD 작업을 한다. DBconn.java 싱글톤
//추상메서드가 1개도 없는 데 추상 클래스로 선언이 가능할까요? 가능하다.(선언은 가능하다)
//그럼 도데체 왜? 만드는걸까?
// ㄴ객체(인스턴스) 생성해서 사용하지 마세요. 라는 의도이다.
// ㄴ그냥 설계사의 의도이다.
싱글톤 구현방법
'Java' 카테고리의 다른 글
[Java]Colletions FrameWork(1)__개발공부 24일차-1 (0) | 2022.03.23 |
---|---|
[Java] 오토 박싱/언박싱__개발공부 21일차-1 (0) | 2022.03.23 |
[Java] 클래스(4)-상속__개발공부 17일차 (0) | 2022.03.15 |
[Java] 클래스(3)__개발공부 16일차-1 (0) | 2022.03.11 |
[Java] 클래스(2)__개발공부 15일차-1 (0) | 2022.03.11 |