방학동안 프로젝트도 하면서 코드 짜는 실력을 키웠지만
아직 부족한 점이 많다
자프실2 로 새로 시작하면서 내가 많이 까먹었고, 내 실력이 부족했었다는것을 알게되었다.
이번 자프실2는 정말 제대로 내 코딩 근육을 키우는 시간으로 만들어보려고한다.
프로젝트를 하면서 느낀 것은 내 코딩 습관의 문제다.
하나를 처리하지 못하고 여러가지에 정신이 팔려 정작 문제를 해결하지 못하는 문제,
디버깅 방법을 모르는 문제.. (중단점과 스택을 이용해 효과적인 디버깅을 수행해야한다. )
자프실2를 통해 내 코딩 근육을 키우고, 코테 스터디를 통해 진짜 내 실력을 키우려고한다.
-----------------------------------------------------------------------------------------------------------------
자프실1 복습 문제
Vehicle - Driver 문제
5. Vehicle의 각 하위클래스들로 버스, 비행기, 탱크가 있으며 이들은 각 객체의 특성에 맞게 움직이지만, 이동거리만큼 연비가 소모되는 동작은 공통적으로 정확히 같은 동작을 한다. 하위 클래스들의 move()는 어디서, 어떻게 구현하는 것이 좋을까요? 적합한 방법을 모두 고르세요
헷갈린 문항
2. 1의 방법으로 구현하되, 하위객체에서 상위객체의 멤버에 접근하기 위해 상위클래스의 메소드를 모두 static으로 선언한다
static 메서드는 정적 바인딩이라 다형성이 불가능 하다.
연료·주행거리 같은 인스턴스 상태를 다루기 부적절
개념
static은 다형성이 없다.
static 은 클래스 소속이라 오버라이딩이 불가능하다.
static메서드는 this가 없고 인스턴스 필드 접근이 불가능하다.
개념
정적 바인딩
컴파일 시점에 호출될 메서드가 결정된다.
대표적으로 static, private, final, 필드(변수) 접근이 해당된다.
특징: 컴파일러가 "이건 무조건 이 클래스의 걸 쓸 거야"라고 미리 정해놓기 때문에 다형성이 적용되지 않음.
개념
동적 바인딩
런타임 시점에 호출될 메서드가 결정된다.
인스턴스 메서드(override 가능한 메서드)가 해당된다.
다형성의 핵심: 실체 객체 타입에 따라 실행되는 코드가 달라진다.
개념
자바에서는 인터페이스도 타입이다.
즉, Moveable 인터페이스를 구현한 객체라면 Moveavle타입으로 참조가 가능하다.
장점! 다형성을 만족한다. 클래스에 종속되지 않고, Moveable 인 객체를 다 받아서 동작하게 할 수 있다 .
개념
업캐스팅
Vehicle v = new Bus();
v의 타입은 Vehicle이고 Bus 객체를 생성한 것이다.
=> v는 Vehicle 타입 참조변수잉ㄴ데, 실제로는 Bus 객체를 가르킨다.
참조의 기능 예시
(1) Vehicle 타입으로 여러 종류를 한 배열에 담기
Vehicle[] garage = { new Bus(), new Airplane(), new Tank() };
for (Vehicle v : garage) {
v.move(); // 실제 타입에 따라 Bus/Plane/Tank의 move() 실행
}
👉 Bus/Plane/Tank를 각각 따로 배열 관리할 필요 없음. Vehicle 타입 하나로 다 통합 관리 가능.
(2) Driver가 모든 Vehicle을 운전할 수 있게 하기
class Driver {
void drive(Vehicle v) {
v.move(); // Vehicle 공통 기능 호출
}
}
Driver d = new Driver();
d.drive(new Bus());
d.drive(new Airplane());
d.drive(new Tank());
👉 Driver는 “차량을 모는 법”만 알면 되고, 그게 버스인지 비행기인지 신경 쓸 필요 없음.
정리
- 참조변수 = 객체를 직접 들고 있는 게 아니라 “리모컨/주소표” 같은 역할.
- Vehicle 타입 참조 = Bus·Airplane·Tank 같은 구체 객체를 하나의 공통 타입으로 다루게 해줌.
- 장점: 코드 재사용성↑, 유연성↑, 다형성(동적 바인딩) 활용 가능.
6. Driver d = new Driver("미미"); 로 생성된 d와 Moveable m=new Bus(..)가 있다. "Driveable 한 d 는 Moveable한 m을 drive 한다."를 코드로 나타내면?
개념
자바 형변환
자바에서 형변환은 (타입) 참조변수 형태
Bus b = new Bus();
Vehicle v = (Vehicle) b; // Bus → Vehicle (업캐스팅)
((Drivveable)d).drive(m); //캐스팅 후에 Driveable타입의 메서드 호출
10. 문제에서 정의한 Vehicle-Driver 클래스의 주어진 조건, 클래스다이어그램, 그리고 주어진 코드들을 참고하여 실행가능한 프로그램을 만듭니다. 이 시간에는 Vehicle클래스와 Driver 클래스를 만들고 실행결과와 함께 게시판에 제출합니다. (+20점) 다시 풀 때는, Driver, 버스, 탱크, 비행기 클래스와 인터페이스 등 다이어그램에 있는 모든 것을 설계하고 구현합니다. 실행결과에서 띄어쓰기나 빈칸개수의 변경은 가능합니다.
'자바' 카테고리의 다른 글
| week3. 자바 Collections (set,list,map ) (0) | 2025.09.23 |
|---|---|
| week2: 자바 프로그래밍 (static, final, 싱글톤) (0) | 2025.09.19 |
| 6. Inheritance and Polymorphism (0) | 2025.05.27 |
| 5. Access, Encapsulation, and Scope (0) | 2025.05.23 |
| 4. String method (0) | 2025.05.12 |