19,800원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결그림으로 배우는 자바, 파트2: 객체지향!
인터페이스 자체에 잘 이해가 되질 않습니다.
안녕하세요. 홍팍님 인터페이스 강의에서 궁금한 점이 생겨 질문 드립니다. 인터페이스란 개념 설명해주신 대로 인터페이스란 프로토 타입(추상 메소드 ) 즉 빈껍떼기 메소드 라고 말씀해주셨습니다. 즉 알람이라는 메소드 안에 어떻게 알람이 작동할지 모른 상태라는 것인건 알겠습니다. 그리고 그 핸드폰(클래스)이 아직 어떻게 작동할지 모르는 알람에게 접근해 그 알람이 어떻게 작동할지 핸드폰(클래스)에서 재정의 즉 값을 넣어준다는 것도 잘 알겠습니다. 하지만 여기서 궁금한것이 저번 시간에 공부했던 클래스 메소드와 비교해 인터페이스의 장점이 무엇인지 잘 모르겠습니다. 객체가 주어지면 그 객체에 맞는 클래스를 만들고 그 클래스 안에 필드 값을 저장 및 생성자를 통해 필드 값에 대한 실행 코드를 작성하는것으로 알고 있습니다. 그 다음 메소드를 통해 함수 호출을 하는것도 알고 있구요. 이렇게 하면 굳이 인터페이스를 써야하는 이유가 있을까요? 제가 알고 있는 예로 말씀 드리겠습니다. 자동차(객체)라는걸 만든다고 가정할떄 class를 통해 자동차를 정의해주고 자동차의 속성(필드값)을 지정해주고 그 속성이 가지는 값들을 생성자를 통해 정의해주고 그 밑에 자동차의 기능(메소드)를 작성합니다. 그러면 한 class 안에 메소드가 이미 들어가 있는 상황이 되겠죠? 그렇다면 인터페이스를 통해 굳이 빈껍데기인 메소드를 만들고 이걸 한 class에서 불러와 값을 지정해주는 의미가 있나요? 이미 한 자동차라는 class안에 메소드까지 다 지정해놓은 상황인데 굳이 자동차의 기능을 빈껍데기로 만들고 이 빈껍데기를 자동차라는 class 가 받아서 그 메소드 값을 지정해준다는게 너무 비효율적 작업이 아닌가.. 생각이 듭니다..그리고 다른 클래스의 메소드를 불러오는거라고 한다면 상속이라는걸 통해 메소드를 받으면 되는거 아닌가요?.. 제가 말씀 드린 궁금증이.. 어떤 궁금증인지.. 잘 파악이 되셨는지 모르겠습니다. 워낙.. 글을 잘 못써서요.. 지금까지 긴 글 봐주셔서 감사의 말씀을 드리며... 답변 주시면 감사드리겠습니다.
- 미해결그림으로 배우는 자바, 파트2: 객체지향!
ArrayList 질문
ArrayList에는 용량이 정해져있지 않나요?? push 메소드를 이용해서 임의로 정한 용량보다 배열의 길이가 커지면 용량을 2배로 늘리는 기능을 구현하고 싶은데 임의로 정한 용량이 진짜 용량을 의미하는지 아니면 단지 변수일뿐인지 궁금합니다.. 그리고 printStack 메소드를 호출하면 print는 되지만 다음과 같은 오류가 뜹니다.. 왜그런지 알수있을까요?ㅜ list : 1 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) at java.base/java.util.Objects.checkIndex(Objects.java:373) at java.base/java.util.ArrayList.get(ArrayList.java:425) at ParaStackAL.printStack(ParaStackAL.java:40) at TestStack.main(TestStack.java:66) ----------------------------------------------- 코드입니다. import java.util.ArrayList; public class ParaStackAL<T> { private ArrayList<T> list; int capacity; public ParaStackAL(int capacity) { this.capacity = capacity; setList(new ArrayList<T>()); } public void push(T data) { if(capacity <= getList().size()) { System.out.printf("Increase Capacity : %d -> ", capacity); capacity = capacity * 2; System.out.println(capacity); } getList().add(data); System.out.println("Inserted data : " + data); } public T pop() { T temp = getList().get(getList().size() - 1); getList().remove(getList().size() - 1); System.out.println("Deleted data : " + temp); return temp; } public boolean isEmpty() { return getList().isEmpty(); } public void printStack() { if(isEmpty()) { System.out.println("Stack is empty!"); } else { System.out.print("list : "); for(int i=0; i<=list.size(); i++) { System.out.print(list.get(i) + " "); } } System.out.println(); } public ArrayList<T> getList() { return list; } public void setList(ArrayList<T> list) { this.list = list; } }
- 미해결그림으로 배우는 자바, 파트2: 객체지향!
모든 강의 수강 후
강좌 잘 들었습니다! 그림으로 이해하니 빠른 습득이 가능한 것 같습니다 ㅎㅎ 인터페이스까지 마치고 학습을 종료했는데 이후에는 어떤 것을 공부해야하나요? 추가로 연습문제들을 풀어보고 싶은데 혹시 추천해줄만한 문제 있을까요? 저의 목표는 대학교 JAVA 수업 A+ 받기 입니다.. 학교 수업에서는 기본개념보다 훨씬 자세하고 구체적으로 나가기 때문에 조금 어렵게 공부해보고 싶습니다ㅜㅜ 추천해주실만한 커리나 문제가 있으면 부탁드립니다!
- 미해결그림으로 배우는 자바, 파트2: 객체지향!
Random
//임이ㅢ의 참 또는 거짓 double randBoolean = random.nextBoolean(); 여기서 nextBoolean 메소드를 통해 참 거짓이 반환되면 boolean 타입으로 선언해주어야하는 것이 아닌가요?? 왜 double인지 이해가 안갑니다..ㅠ
- 미해결그림으로 배우는 자바, 파트2: 객체지향!
수업자료
안녕하세요! 혹시 수업자료 ppt나 연습문제 등은 어디서 다운받을 수 있나요?