일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 패캠챌린지
- ncs
- 자바연습문제
- String
- java기초
- 리눅스
- 자바기본
- 데이터베이스
- DesignPattern
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- 자바
- 디자인
- Spring
- DB
- js
- 패스트캠퍼스후기
- 직장인자기계발
- 국비
- 자바예제
- linux
- 재택근무
- 스프링
- javabasic
- 패스트캠퍼스
- 웹
- java
- 자바기초
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- 직장인인강
- 디자인패턴
- Today
- Total
FIF's 코딩팩토리
자바 기초 NCS교육과정(20)-캐스팅과 바인딩 본문
데이터 타입
1 기본 데이터타입 : byte,short,int,long,float,double,boolean,char
2 참조 데이터타입 : array, class, interface
인자전달방식
1 call by value : 값복사 - 기본 데이터타입
void add(int a, int b){}
add(10, 20);
2 call by reference : 주소복사 -참조 데이터타입
void process(int[] arr){}
process(new int[]{1,2,3});
형변환(casting) - 기본 데이터타입
1 묵시적형변환 : 작 -> 큰
2 명시적형변환 : 큰 -> 작
int num=3;
double data=num; //묵시적형변환
short val=(short)num; //명시적형변환
객체형변환-참조데이터타입
1 상속관계일때 형변환이 가능하다.(is a)
2 업캐스팅 발생된후 다운캐스팅을 할 수 있다.
업캐스팅(up-casting) : 부모객체로 자식객체를 참조하도록 형변환하는 기술
다운캐스팅(down-casting) : 업캐스팅을 다시 원상복귀해주는 형변환하는 기술
Java109_casting.java
class Parent {
void process() {
System.out.println("Parent");
}
}
class Child extends Parent {
void call() {
System.out.println("Child call");
}
@Override
void process() {
System.out.println("Child process");
}
}
class Sun extends Parent {
void prn() {
System.out.println("Sun prn");
}
@Override
void process() {
System.out.println("Sun process");
}
}
class Outer{
void prn() {
System.out.println("Outer prn");
}
}
public class Java109_casting {
public static void main(String[] args) {
Parent p=new Parent();
Outer t=new Outer();
//독립적인 참조데이터타입(객체)은 형변환이 안된다.
//p=t;
Child c=new Child();
p=c;
//Parent영역에 process()검색후->Child영역에 process()검색을 해서 오버라이딩이 되여있으면 Child영역에 process()메소드를 실행한다.
p.process();
//p.call();
//객체생성 및 업캐스팅
Parent pt=new Child();
//다운캐스팅(down-casting)
Child cn=(Child)pt;
cn.process();
cn.call();
Parent pe=new Sun();
pe.process();
}
}
다형성(polymorphism)
1 사전적 의미는 '여러가지 형태를 가질 수 있는 능력'을 의미한다.
2 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조하는 기술이다.
void add(Parent a, Parent b){}
add(new Child(), new Child());
add(new Sun(), new Sun());
바인딩(binding) : 메소드 호출을 실제 메소드의 몸체와 연결하는 기술이다.
1 정적바인딩(static binding) : 컴파일단계에서 어떤 클래스의 어떤 메소드가 호출되는지 연결하는 기술
2 동적바인딩(dynamic binding) : 실행단계에서 어떤 클래스의 어떤 메소드가 호출되는지 연결하는 기술
Java110_binding.java
class BindTest extends Object {
String stn;
public BindTest() {
}
public BindTest(String stn) {
this.stn = stn;
}
@Override
public String toString() {
return stn;
}
}
public class Java110_binding {
public static void main(String[] args) {
BindTest bt = new BindTest();
//정적바인딩
System.out.println(bt.toString());
//업캐스팅
Object obj=bt; //Object obj=new BindTest;
//동적바인딩
System.out.println(obj.toString());
process(new String("java"));
//Object->Number->Integer
process(new Integer(10));
}
//is a (상속관계) ->up-casting(업캐스팅)->dynamic binding(동적바인딩)
public static void process(Object obj) {
System.out.println(obj.toString());//동적바인딩
}
}
LgTv.java
public class LgTv {
String maker;
public LgTv() {
}
public LgTv(String maker) {
this.maker = maker;
}
public void turnOn() {
System.out.println(maker + " TV-전원을 켠다.");
}
public void turnOff() {
System.out.println(maker + " TV-전원을 끈다.");
}
public void soundUp() {
System.out.println(maker + " TV-소리를 높인다.");
}
public void soundDown() {
System.out.println(maker + " TV-소리를 줄인다.");
}
}
SamsungTv.java
public class SamsungTv {
String maker;
public SamsungTv() {
}
public SamsungTv(String maker) {
this.maker = maker;
}
public void turnOn() {
System.out.println(maker + " TV-전원을 켠다.");
}
public void turnOff() {
System.out.println(maker + " TV-전원을 끈다.");
}
public void soundUp() {
System.out.println(maker + " TV-소리를 높인다.");
}
public void soundDown() {
System.out.println(maker + " TV-소리를 줄인다.");
}
}
Java111_binding.java
public class Java111_binding {
public static void display(double x, double y) {
System.out.println(x+y);
}
//결합도가(의존성이)높다 - 유지보수와 확상정이 약하다.
public static void processLg(LgTv lg) {
lg.turnOn();
}
public static void processSamsung(SamsungTv ss) {
ss.turnOn();
}
public static void main(String[] args) {
display(4.5,6.3);
display(10,20);
LgTv lg = new LgTv("LG");
processLg(lg);
SamsungTv ss=new SamsungTv("SAMSUNG");
processSamsung(ss);
}
}
LgTv2.java
public class LgTv2 extends HomeTv {
public LgTv2() {
}
public LgTv2(String maker) {
this.maker=maker;
}
public void call() {
System.out.println("lg call");
}
}
SamsungTv2.java
public class SamsungTv2 extends HomeTv {
public SamsungTv2() {
}
public SamsungTv2(String maker) {
super(maker);
}
public void loc() {
System.out.println("samsing loc");
}
}
Java112_binding.java
public class Java112_binding {
// 결합도가(의존도가) 낮아졌다
public static void process(HomeTv tv) {
tv.turnOn();
if(tv instanceof LgTv2) {
LgTv2 lg=(LgTv2)tv;
lg.call();
}else if(tv instanceof SamsungTv2) {
SamsungTv2 ss=(SamsungTv2)tv;
ss.loc();
}
}
public static void main(String[] args) {
LgTv2 lg = new LgTv2("LG");
process(lg);
SamsungTv2 ss = new SamsungTv2("SAMSUNG");
process(ss);
}
}
instanceof : 객체를 비교하기 위한 비교연산자이다.
a instanceof A
: a객체가 A타입이면 true, 아니면 false 리턴한다.
Java113_binding.java
class ExamA {
void prn() {
}
}
class ExamB extends ExamA {
void prn() {
}
}
class ExamC extends ExamB {
}
public class Java113_binding {
public static void main(String[] args) {
//객체 instanceof 비교 데이터타입과 같거나 조상 데이터타입
ExamB bb=new ExamB();
System.out.println(bb instanceof ExamA);//true
ExamA aa=new ExamA();
System.out.println(aa instanceof ExamB);//false
ExamA ea=new ExamB();
System.out.println(ea instanceof ExamA);//true
System.out.println(ea instanceof ExamB);//true
System.out.println(ea instanceof ExamC);//false
}
}
'Back-End > 국비 NCS교과과정' 카테고리의 다른 글
자바 기초 NCS교육과정(22)-API&오브젝트 (0) | 2019.07.31 |
---|---|
자바 기초 NCS교육과정(21)-캐스팅과 바인딩 문제풀이 (0) | 2019.07.31 |
자바 기초 NCS교육과정(19)-상속 문제풀이 (0) | 2019.07.30 |
자바 기초 NCS교육과정(18)-상속 (0) | 2019.07.30 |
자바 기초 NCS교육과정(17)-접근제어자 문제풀이 (0) | 2019.07.30 |