일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- linux
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- ncs
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- javabasic
- 자바연습문제
- 웹
- 데이터베이스
- 직장인인강
- 패스트캠퍼스
- js
- 자바예제
- 디자인
- java
- 자바기초
- DB
- 재택근무
- String
- 국비
- java기초
- 자바기본
- 리눅스
- 패스트캠퍼스후기
- 스프링
- 자바
- DesignPattern
- Spring
- 패캠챌린지
- 디자인패턴
- 직장인자기계발
- 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 |