본문 바로가기
728x90
반응형

back-end/JAVA43

34) 매개변수의 다형성(1)-다형적 매개변수 34) 매개변수의 다형성(1)-다형적 매개변수 장점: ①다형적 매개변수 ②하나의 배열로 여러 종류 객체 다루기 지금까지 배운 다형성: ①Tv t = new SmartTv(); ②참조 변수의 형 변환-리모콘 바꾸기 ③instanceof연산자를 이요한 형변환 가능 여부 판단 1. 매개변수 다형성 -참조형 매개변수는 메서드 호출 시, 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다. 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 31 32 33 34 35 class Product{ int price; int bonusPoint; } class Tv extends Product{ } class Aud.. 2021. 6. 10.
33) instanceof연산자 33) instanceof연산자 1. instanceof연산자란? -참조변수의 형변환 가능 여부 확인에 사용. 가능하면 true반환 -형 변환 전에 반드시 instanceof로 확인해야 한다. 1 2 3 4 5 void dowork(Car c) { if(c instanceof FireEngine) { //1.형변환이 가능한지 확인 FireEngine fe = (FireEngine)c; //2.형변환 } } Colored by Color Scripter cs 1행| void dowork(Car c) { Car c가 조상이기 때문에 객체로는 new Car(), new FireEngine(), new Ambulance()가 올 수 있다. 그 객체를 쓰기 전에 맞는지 확인하려 하는 것이다. 참조변수 형변환은 조.. 2021. 6. 9.
32) 참조변수의 형변환 32) 참조변수의 형변환 1. 참조변수의 형변환 -사용할 수 있는 멤버의 개수를 조절하는 것 기본형의 형변환은 타입이 double인 3.5를 int로 바꾸면 3이 된다. 아예 값이 바뀌어 버렸다. 하지만 참조변수의 형변환은 주솟값이나 객체가 바뀌는 게 아니고 멤버의 개수가 바뀐다. -조상·자손 관계의 참조변수는 서로 형변환 가능(자손끼리는 불가능) 1 2 3 4 class Car{} class FireEngine extends Car{} class Ambulance extends Car{} cs 조상인 Car와 자손인 FireEngine, 조상인 Car와 자손인 Ambulance끼리는 서로 형변환이 가능하나, 자손끼리는 형변환이 불가능하다. 2. 예시 1 2 3 4 5 6 7 8 9 10 11 12 13.. 2021. 6. 9.
31) 다형성(polymorphism) 31) 다형성(polymorphism) 1. 다형성(많을 다/형태 형) -여러 가지 형태를 가질 수 있는 능력 -'조상타입'의 참조변수로' 자손타입' 객체를 다루는 것★★★★★ 이 클래스를 가지고 객체를 만들면 Tv t = new Tv(); //Tv객체 SmartTv s = new SmarTv();//SmartTv객체 객체와 타입이 일치되었다. 하지만, 다형성은 Tv t = new SmartTV(); //타입불일치 객체와 타입이 불일치가 된다. 조상의 타입변수로 자손 타입 객체를 다루는 것이 '다형성'이다. 2. 객체와 참조변수의 타입이 일치할 대와 일치하지 않을 때의 차이 smartTv의 리모콘은 7개의 버튼을 가지고 있다. Tv로부터 상속받은 5개의 버튼과 smartTv의 버튼 2개 총 7개의 버튼이.. 2021. 6. 9.
30) 접근제어자와 캡슐화(encapsulation) 30) 접근제어자와 캡슐화(encapsulation) 1. 접근제어자와 캡슐화 접근제어자를 사용하는 이유? -외부로부터 데이터를 보호하기 위해서 public은 접근 제한이 없다 보니 int의 범위 ±20억 사이에 아무 값이나 넣어도 그 값이 출력된다. 근데 시, 분, 초의 범위는 결정되어 있어서 범위 이외값이 들어가면 데이터가 보호되지 않는다. 그래서 접근제어자를 private로 하여 외부에서 직접 접근하지 못하도록 한다. 대신에 메서드를 public으로 설정하여 내부에서는 간접 접근을 가능하게 만든다. -외부에서 불필요한, 내부적으로만 사용되는 부분을 감추기 위해서 isNotValidHour메서드의 경우 제어자를 굳이 public으로 쓸 필요 없다. 내부에서만 맞는지 아닌지를 판단하면 되므로, priv.. 2021. 6. 7.
29) 접근제어자(access modifier): private, default, protected, public 29) 접근제어자(access modifier): private, default, protected, public 1. 접근제어자의 종류 private: 같은 클래스 내에서만 접근이 가능하다. (default): 같은 패키지 내에서만 접근이 가능하다. protected: 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다. public: 접근 제한이 전혀 없다. 하나의 대상에 4개 중에 1개만 사용가능하다. 제어자 같은 클래스 같은 패키지 자손클래스 전체 public O O O O protected O O O (default) O O private O public> protected>(default)>private순으로 접근 범위가 작아진다. 2. 접근제어자 주의사항 -public과.. 2021. 6. 7.
28) 제어자 static, final, abstract 28) 제어자 static, final, abstract 1. 제어자(modifier) -클래스와 클래스의 멤버(멤버변수, 메서드)에 부가적인 의미 부여 영여로 따지면 형용사와 같은 역할입니다. 형용사는 명사 앞에 붙어서 꾸며주는 역할을 하죠. 접근제어자: public. protected, (default), private : 4개 중 1개만 사용가능 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp -하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만) 접근제어자는 하나만 사용 가능하고, 제일 왼쪽에 쓴다. 꼭 그래야 하는 건 아닌데, 주로 그렇게 씁니다. final보다 static을 왼쪽에 .. 2021. 6. 7.
27) import문, static import 27) import문, static import문 1. import문 -클래스를 사용할 때 패키지 이름을 생략할 수 있다. -컴파일러에게 클래스가 속한 패키지를 알려준다. 원래는 Data라는 클래스는 java-util패키지 안에 있는 클래스라서 java.util.Data라고 적는 게 올바른 표현이다. 하지만 모든 클래스를 이렇게 적다 보면 시간도 많이 걸리고 귀찮다. 그래서 import문을 선언하여 이 클래스가 어떤 패키지 안에 들어있는지 생략할 수 있다. 단축기 ctrl+shift+o를 사용하면 import문이 자동으로 생성된다. 똑같은 클래스가 있으면 어떤 패키지인지 선택하는 창이 나온다. 그럼 맞는 패키지를 선택하면 된다. 어? 근데 지금까지 String클래스는 패키지 이름을 매번 쓰지 않았죠? -.. 2021. 6. 7.
26) 패키지(package), 클래스패스(classpath) 26) 패키지(package), 클래스패스(classpath) 1. 패키지(package) -서로 관련된 클래스의 묶음(Java8 기준으로 약4000개의 클래스가 있음. 많아서 묶어줘야 됨) -클래스는 클래스 파일(. class), 패키지는 폴더, 하위 패키지는 하위 폴더 -클래스의 실제 이름(full name)은 패키지를 포함(이제까지 쓴 String의 실제 이름: java.lang.String) *rt.jar는 실행환경에 필요한 클래스들을 압축한 파일(JDK설치경로\jre\lib에 위치) *Java9부터 rt.jar는 module개념이 들어가면서 없어짐 *jar파일은 exe를 통해 압축을 풀 수 있음(jar.exe), jar=zip과 같음 2. 패키지의 선언 -패키지는 소스파일의 첫 번째 문장으로 단.. 2021. 6. 6.
728x90
반응형