본문 바로가기

Java의 정석/객체지향 프로그래밍 II18

Stack 과 Queue의 활용 (스택 / 큐) ch11 - 19 ~ 21 스택과 큐 의 활용 (Stack & Queue) [ 스택 ] 스택의 활용 예 1) 수식 계산 ( (3 + 2) * 8 ) / 2 2) 수식 괄호 검사 3) 워드프로세서의 undo / redo (작업한것을 취소 / 직전 행동을 되돌리기) 4) 웹 브라우저의 뒤로 / 앞으로 첫 방문을 구글을 했다고 하고, 그 다음 방문을 네이버, 그 다음은 다음을 방문 했다고 치면, 스택의 그림은 아래와 같을것이다. 근데 이때, 웹 브라우저 에서 뒤로가기를 누르면 어떻게 될까 ? 또 하나의 스택을 사용 해서, 다음을 새로운 스택에 옮긴다. 그러면 현재 페이지가 네이버 가 될것 이고, 여기서 만약에 앞으로 가기 버튼을 누르면 새로운 스택 으로 옮긴 다음을 기존 스택에 다시 옮기는 개념 이다. 근데 .. 2023. 9. 19.
인터페이스의 장점 2 인터페이스의 장점 2 1. 개발 시간을 단축 할 수 있다. A 클래스와 B 클래스가 직접관계 이면, B 클래스를 수정 해야 할 때, 수정이 끝나기 전까지는, A 클래스를 수정 할 수 없다. 하지만, B 클래스를 인터페이스를 사용 해서, 껍데기와 알맹이를 분리 하면, 알맹이가 수정 되기 전에도, 그냥 A 클래스는 껍데기 (인터페이스) 만 사용 하면 된다. 그래서, 알맹이의 수정이 끝날 때 까지 기다릴 필요가 없다. 2. 변경에 유리한 유연한 설계가 가능 하다. A 클래스와 B 클래스를 인터페이스를 사용함으로써, 간접관계로 만드는 것이다. 위에서 정리했듯이, 변경에 유리한 유연한 설계가 가능 하다. 3. 표준화가 가능 하다. 예를들어, 자바에서, JDBC 인터페이스를 사용하는 경우 이다. 기존에 DBMS를 .. 2023. 7. 10.
인터페이스의 장점 1. 두 대상 (객체) 간의 ' 연결, 대화, 소통 ' 을 돕는 ' 중간 역할 ' 을 한다. interface = inter + face inter : ~ 사이 (between) face : 대상 2. 예시) 자판기를 예시로 들면, 자판기 하드웨어를 둘러싸고 있는 겉부분 (껍데기) 가 인터페이스 이다. 자판기 기능을 감싸고 있는 외부 철판에 있는 여러 기능들을 쉽게 조작 할 수 있고, 그로 인해 음료를 쉽게 뽑아 먹을 수 있게 된다. 3. 예시 2) 컴퓨터를 예시로 들면, 컴퓨터의 하드웨어를 직접 다룬다 ? >> 어려운 일이다. 기계를 사람이 직접적으로 다루는게 어려운 이유는, 기계의 언어와 사람의 언어가 다르기 때문 이다. 그래서, 컴퓨터를 쉽게 다루기 위해 윈도우 같은 GUI를 사용 한다. GUI :.. 2023. 7. 10.
인터페이스와 다형성 1. 인터페이스와 다형성. 다형성 이란 ? 조상의 참조변수로 자손의 객체를 다루는 것을 의미. 인터페이스도 구현 클래스의 부모 라고 말할 수 있을까 ? (엄밀하게 말하면 아니기는 하지만, 조상이라고 생각하면 받아들이기 편할듯 하다.) 예시) class Fighter extends Unit implements Fightable { public void move(int x, int y) { /* 내용 생략 */ } public void attack(Unit u) { /* 내용 생략 */ } } Fighter 라는 클래스는 Unit 이라는 클래스를 상속 받고 있으며, FIghtable 이라는 이름을 가진 인터페이스를 구현 하고 있는 상황 이다. == 메서드 바디를 완성 시켰기에, 인터페이스를 구현 했다고 할 .. 2023. 7. 10.
인터페이스 (interface) 1. 인터페이스 (interface). 프로그래밍 관점에서 봤을 때, 추상 메서드의 집합 이다. 즉, 인터페이스는 구현된 것이 전혀 없는 설계도 (껍데기) 이다. (모든 멤버는 public으로 작성 한다.) 2. 인터페이스와 추상클래스의 차이점. 추상클래스는 일반 클래스 이고, 추상메서드를 가지고 있는 클래스를 의미 한다. 그렇지만, 추상메서드만 가지고 있는 클래스는 아니다. 멤버변수도 존재 하고, 생성자도 존재 한다. 또한, 추상메서드가 아닌 일반 메서드도 존재 한다. 하지만, 인터페이스는 오로지 추상메서드만 지니고 있다. (final 키워드가 붙은, 상수를 지니고 있긴 하지만, 이것은 부수적인 개념 이다.) 3. 인터페이스를 구현 하기 위한 문법. interface 인터페이스이름 { public st.. 2023. 7. 10.
추상 클래스, 추상 메서드 1. abstract 키워드가 붙은 추상 클래스는 인스턴스 생성이 불가능 하다. [ 이클립스 예제 ] [ Console ] 2023. 6. 10.
매개변수의 다형성 매개변수의 다형성 장점 1. 다형적 매개변수 2. 객체 배열 >> 예시를 보며 확인 하기. [ Console ] >> 예시를 보며 확인 하기. [ Console ] 2023. 6. 9.
instanceof 연산자 1. 참조변수가 참조하고 있는 (가리키고 있는) 인스턴스(객체) 의 실제 타입을 알아보기 위해서 instanceof 연산자를 사용. 2. 주로 조건문에 사용된다. 반환값이 true or false 이기 때문에. 3. instanceof 를 이용한 연산결과로 반환값이 true 라는 것은, 참조변수가 검사한 타입으로 형변환이 가능하다는 것을 의미. 예시) void doWork(Car car) { if(car instanceof FireEngine) { FireEngine fe = (FireEngine)car; fe.water(); .. } } 1. instanceof 연산자를 사용해서, 형변환이 가능한지 확인. 2. if문이 참이면, 형변환을 하고, water() 메서드를 호출. 위의 코드는 Car 타입의 .. 2023. 6. 6.
참조변수의 형변환 예시) [ Console ] 1. 37번째 줄에서 water() 메서드를 문제없이 호출. 2. 45번째 줄에서도 water() 메서드를 문제없이 호출. 3. 60번째 줄은 빨간 밑줄이 뜨지는 않지만, 실제 실행하면 ClassCastException 에러가 뜨게 된다. 왜냐하면, 참조변수 myC는 myCar 객체를 가리키고 있는데, 다운캐스팅을 해서 myFireEngine 타입의 참조변수 myFE에 주소값을 대입하면 참조변수 myFE는 myCar 객체를 가리키게 된다. 참조변수 myFE의 타입은 myFireEngine이라 멤버로 water() 메서드를 가지고 있는데, 실제 가리키고 있는 myCar 객체에는 water() 메서드가 없기 때문에, 실행시 에러가 발생 하게 된다. 2023. 6. 6.