전체 글

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-29,30 여러 종류의 객체를 배열로 다루기

ch7-29,30 여러 종류의 객체를 배열로 다루기 다형성의 장점은 1. 다형적 매개변수 2. 하나의 배열로 여러 종류 객체 다루기. 가 있는데, 이번에는 하나의 배열에 여러 종류 객체를 다루는 것을 배운다. 하나의 배열에는 같은 타입만 저장할 수 있다. 다형성을 이용하면 배열에 여러 종류의 객체를 저장할 수 있다. 그림을 보면 만들어진 객체의 그림은 다르지만, p1, p2, p3 참조 변수를 배열에 담은 것 외에는 차이가 없다. 조상타입의 배열을 만들면 다형성으로 Product 객체 말고도 자손 객체인 Tv, Computer, Audio를 배열에 담을 수 있다. 같은 것도 올 수 있지만 다른 자손 객체가 들어올 수 있어 여러 종류 객체를 담을 수 있다. Product 타입의 cart 배열을 만들어서 여..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-27,28 매개변수다형성

ch7-27 매개변수다형성 다형성의 장점은 1. 다형적 매개변수 2. 하나의 배열로 여러종류 객체 다루기. 가 있다. ⭐ 다형성 정리 1. 조상 타입의 참조 변수로 자손 객체 다루기. ex) Tv t = new SmartTv(); 2. 참조 변수의 형변환 → 멤버 갯수 조절 3. instanceof 연산자 → 형변환 가능 여부 확인 Product라는 부모 클래스, Product를 상속받은 Tv, Computer, Audio 자손 클래스가 있다. 이를 사는 Buyer 클래스가 있다. Buyer 클래스에 buy 메서드를 추가할 때, 매개변수로 new Tv( ); 만 들어올 수 있다. 하지만 다른 물건을 산다 할 때, 매개변수를 바꿔서 메서드를 다시 만들어줘야 한다. 메서드 이름은 같고 매개변수를 바꾼 것을 ..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-26 instanceof 연산자

ch7-26 instanceof 연산자 instanceof 연산자는 참조변수의 형변환 가능여부 확인에 사용한다. 참조변수의 형변환은 조상, 자손 사이에서만 가능하다. 형변환을 할 때는 1. instatnceof 연산자를 사용해서 형변환 가능여부 확인 후 그다음 2. 형변환 해야 한다. new Car(), new FireEngine(), new Ambulance() 3문장 모두 매개변수로 들어갈 수 있다. 다형성으로 Car또는 Car의 모든 자손이 들어갈 수 있다. Ambulance는 FireEngine과 형제관계이기 때문에 형변환이 불가능하다. 이를 판별하는 연산자가 instanceof이다. 만약 Ambulance를 형변환 하고 싶으면 else if문을 추가할 수 있다. instanceof 연산자는 조상..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-24,25 참조변수의형변환(2)

ch7-24,25 참조변수의형변환(2) "car."을 입력했을 때 사용할 수 있는 메서드가 나온다. 이 때 water는 존재하지 않는다. 최고 조상인 Obejct의 자손들도 나온다. 매개변수 car를 FireEngine 타입으로 형변환 하고나서, "fe."을 입력하면 사용할 수 있는 멤버가 늘어나 water()를 사용할 수 있다. 참조변수 car의 값이 null이어도 형변환은 가능하다. 하지만 car2.drive()를 호출했을 때 오류가 발생한다. NullPointerException은 아무 객체가 없는데 호출할 경우 발생하는 오류이다. java.lang.ClassCastException은 컴파일 에러가 아니라 실행 에러이다. (FireEngine)으로 형변환 하면 컴파일러는 참조변수 c가 실제로 Car..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-24,25 참조변수의형변환(1)

ch7-24 참조변수의 형변환 ⭐ 참조변수의 형변환의 결과는 사용할 수 있는 멤버의 갯수를 조절하는 것이다. 멤버의 갯수 말고는 달라지는 점이 없다. 3.6 실수형을 정수형으로 형변환 하면 3으로 값이 바뀐다. 기본형의 형변환은 값이 바뀐다. 하지만 참조변수의 형변환은 사용할 수 있는 멤버 갯수만 변하고 주소값, 객체 등 전혀 바뀌는 것이 없다. FireEngine 인스턴스의 멤버는 상속받은 4개, 자신의 것 1개 총 5개가 있다. Car c = (Car)f;는 Car 타입의 참조변수 c에 참조변수 f를 대입한다. f는 FireEngine 타입으로 대입 연산자에서 양변의 타입이 일치하지 않기 때문에 형변환을 해줘야 한다. 참조변수 f와 FireEngine 인스턴스는 일치하지만, 참조변수 c는 Car 타입..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-23 다형성

ch7-23 다형성 ⭐ 조상 타입 참조 변수로 자손 객체 타입 객체를 다루는 것 -> 외우기 Tv클래스를 상속받는 자식 SmartTv를 만든다. SmartTv의 멤버는 상속 받은 5개 + 자신의 것 2개 해서 총 7개의 멤버를 갖고 있다. 객체를 생성할 때 지금까지는 타입을 일치시켜 객체를 생성했다. 하지만 다형성에서는 타입이 불일치할 수 있다. 즉 조상 타입 참조 변수로 자손 객체를 생성할 수 있다. 참조변수와 객체의 타입이 일치할 때와 일치하지 않을 때의 차이는 뭘까? 왼쪽 그림은 참조변수의 멤버가 7개이고, SmartTv 멤버도 7개이므로 모든 객체를 사용할 수 있다. 오른쪽 그림은 참조변수가 Tv로 멤버가 5개이고, SmartTv 멤버가 7개 이어도 쓸 수 있는 건 5개이다. 조상 타입 참조 변수..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-22 캡슐화

ch7-22 캡슐화와 접근 제어자 접근 제어자는 외부로부터 데이터를 보호하기 위해서 사용한다. 이를 캡슐화라 한다. Time 클래스를 만들었을 때 멤버를 public 제어자로 썼을 때 접근 제한이 없기 때문에 객체를 생성하고, t.hour = 25;로 직접 접근해서 값을 변경할 수 있다. int의 범위는 ±20억으로 사용은 할 수 있지만, hour는 시간으로 범위가 0~23로 제한되야 한다. 따라서 iv를 보호하기 위해서는 제어자를 public이 아니라 private를 사용해서 외부의 접근을 막는다. 메서드는 public으로 만들어 iv에 간접적으로 접근한다. t.hour에 대입 연산자를 사용해서 직접 접근하지 않고, t.setHour 메서드를 이용해서 간접 접근으로 바꾼다. 이런 식으로 직접 접근을 막..

doom

핵심이론 1과목-1(소프트웨어 설계) - ing

자료출처 : https://youtu.be/JhKOsZuMDWs [정보처리기사 필기 절대족보] 핵심이론 1과목-1(소프트웨어 설계) 4월 18일

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-21 접근제어자

ch7-21 접근제어자 접근 제어자는 private, (default), protected, public 중 1개만 사용 가능하다. private는 같은 클래스, (default)는 같은 패키지 내에서만 접근 가능하다. protected는 같은 패키지 + 다른 패키지의 자손 클래스에서 접근 가능하고, public은 접근 제한이 없다. class에는 public, (default) 만 붙일 수 있다. 멤버에는 private, (default), protected, public 4가지 다 가능하다. 실습 package 이름은 pkg1, class 이름은 MyParentTest로 생성한다. MyParent 클래스를 만들어, 접근 범위를 Test 한다. p.prv는 오류난다. private는 같은 클래스만 접근..

자바/자바의 정석 Ch.7 객체지향 프로그래밍 II

ch7-17~20 제어자, static, final, abstract

ch7-17 제어자(modifier) modifer는 클래스, 클래스의 멤버 앞에 붙어서 부가적인 의미를 갖는다. modifier 종류는 접근 제어자 4개를 기본으로 그 외 제어자가 있다. 접근 제어자는 1개만 붙일 수 있다. (default)는 아무것도 붙이지 않는다. 여러 제어자(접근 제어자는 하나만)를 같이 쓸 수 있다. 순서는 상관 없지만 접근 제어자를 맨 왼쪽에 쓰는 것이 국룰이다. static은 멤버 변수, 메서드에 붙일 수 있다. iv 앞에 붙으면 cv가 된다. int width -> static int width 'static { }'는 괄호 안에 static 변수를 초기화한다. 대입 연산자(=)를 사용해서 변수의 값을 초기화하는 것을 간단(명시적) 초기화이다. 괄호({ })를 사용해서 초..

돌맹이떼굴떼굴
떼굴떼굴개발자