inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

추상 클래스와 인터페이스에 대해서 궁금한 것이 있습니다.

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

안녕하세요 ㅎㅎ 좋은 강의 제공해주셔서 감사합니다. 추상 클래스와 인터페이스 사용 시점에 대해 궁금한 것이 있습니다. 제가 처음에 생각한 내용은 추상 클래스 : 부모 클래스와 자식 클래스가 공통으로 제공하는 내용(메서드) 도 존재하지만, 자식클래스 별로 다른 내용 을 제공할 때는 abstract 메서드를 사용하여 구현을 강제시킨다. 인터페이스 : 부모와 자식 간에 공통으로 가지는 내용(메서드 내용이 동일한) 이 없으므로, 상속받는 클래스가 반드시 메서드를 구현한다. 그런데 JAVA8부터 인터페이스에 default 메서드 가 추가되었더군요. 인터페이스에 default 메서드를 선언하면, 인터페이스를 상속받는 클래스에서 구현을 하지 않고도 사용할 수 있더라구요. interface Shape { final int SIZE = 5; void render(); default int getSize() { return SIZE; } } class Rectangle implements Shape { @Override public void render() { StringBuilder buffer = new StringBuilder(); for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { buffer.append("*\t"); } buffer.append("\n"); } System.out.println(buffer); } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int input = sc.nextInt(); Shape shape; if (input == 0) { shape = new Rectangle(); } else { shape = new Triangle(); } shape.render(); System.out.println(shape.getSize()); } }  그렇다면 default 메서드가 추상 클래스의 일반 메서드(추상 클래스가 아닌)와 동일하게 작동하게 되는데 public abstract class Shape { public static final int SIZE = 5; public abstract void render(); public int getSize() { return SIZE; } } 추상 클래스와 인터페이스를 사용하는 시기(?)를 어떻게 구별해야할까요? 구글링을 해보니 인터페이스에 default 메서드가 추가된 이유가 추후에 인터페이스에 새로운 메서드를 추가했을 때, 해당 인터페이스를 상속하고 있는 클래스에서 오류가 발생하지 않기 위해서라고 하는데 그 오픈소스가 엄청 유명해져서 전 세계 사람들이 다 사용하고 있는데, 인터페이스에 새로운 메소드를 만들어야 하는 상황이 발생했다. 자칫 잘못하면 내가 만든 오픈소스를 사용한 사람들은 전부 오류가 발생하고 수정을 해야 하는 일이 발생할 수도 있다. 이럴 때 사용하는 것이 바로 default 메소드다. 결론적으로 내용을 정리하게 되면 추상 클래스에서 새로운 메서드를 추가해야 한다면 abstract를 추가하지 않는다. 인터페이스에서 새로운 메서드를 추가해야 한다면 default 메서드를 사용한다. default 메서드가 추가 되면서 추상 클래스와 인터페이스를 언제 사용해야 하는지 잘 모르겠습니다...! 감사합니다!

  • java
  • 객체지향
  • jvm
  • data-structure
hope 댓글 1 좋아요 3 조회수 236

[실습3-2] MyString에 복사 생성자 만들기에서 deepCopy( ) 메서드 리턴 타입

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

안녕하세요. 정말 별거 아닌 질문이지만.. [실습] MyString에 복사 생성자 추가 1:50초에서 deep copy를 위한 메서드를 만들라고 하실 때 메서드의 리턴 타입을 MyString으로 하라고 하셨는데.. void라고 이해해도 될까요?.. 좋은 강의 감사히 잘 보고 있습니다. 항상 건강하세요!

  • java
  • 객체지향
  • jvm
  • data-structure
오늘도 댓글 3 좋아요 1 조회수 304

보이지 않는 임시 객체 9:48초에 질문 있습니다.

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

안녕하세요 강의 잘 보고 있습니다. 보이지 않는 임시 객체 9:48초에 질문이 있습니다. 자바 컴파일러가 String s1 = "Java";를 String s1 = new String("Java");로 변환한다고 하셨는데 자바 컴파일러는 변환 하는것이 아닌걸로 이해하고 있어요.. String은 리터럴 방식과 객체 생성 방식이 다르게 관리되고 있는걸로 알고 있는데 혹시 제가 잘못 이해를 하고 있는건가 싶어서요.

  • java
  • 객체지향
  • jvm
  • data-structure
파이팅 댓글 2 좋아요 1 조회수 344

코틀린 컴파일에 대해서

미해결

더 자바, 코드를 조작하는 다양한 방법

자바, jvm, jdk 그리고 jre 강의에서 kotlinc 명령어로 .kt 파일을 컴파일하시는걸 봤는데요, 코틀린 컴파일러는 jdk에 포함되어 있는 것이 아니고 따로 설치해야 하는게 맞을까요? jre는 java의 실행환경을 제공하고, jdk는 개발 도구 키트를 제공해서 java를 컴파일하는 javac 등의 명령어? 툴?은 jdk에 포함되어 있다고 강의 교안에 적혀있는데 그럼 코틀린의 컴파일러는 추가적으로 설치가 필요한지, 아니면 뭔가 방법이 있는지 궁금합니다. 우선 컴파일하면 바이트 코드가 되기 때문에 런타임에 필요한 라이브러리만 포함하여 패키징하면 jre에서 실행할 수 있다는 것은 이해했습니다!

  • java
  • kotlin
  • jdk
  • jvm
이찬미 댓글 1 좋아요 0 조회수 275

Metaspace에 대해서

해결됨

면접 전에 알고 가면 좋을 것들 - 신입 Java 백엔드 개발자편

안녕하세요! JVM 메모리구조를 최근에 공부하면서 생긴 궁금증이 있어 질문을 드리고자 합니다. Metaspace 영역에서는 Class와 Method, Static 변수들에 대한 메타데이터를 가지고 있다고 알고 있는데, 이는 Method 영역의 역할과 겹치는 것 같습니다. Method 영역 내에 Metaspace 영역이 존재하는 걸까요? Spring 프레임워크를 사용하다보면, 수 많은 요청에 대해 Reflection을 사용하게 되고 이는 Metaspace에 부하를 줄 수 있다고 하셨습니다. 하지만 특정 A 클래스를 동적으로 로딩하면 최초 한 번에 한해서만 Metaspace에 메타데이터를 저장할 것이고, 이후에는 추가적으로 해당 클래스에 대한 메타데이터를 중복해 저장하지 않는데 어느 포인트에서 성능이 저하되는지 궁금합니다. 위와 같은 개념들을 아무리 찾아봐도 나오지 않아서 선생님께 여쭤보고 싶었습니다. 올려주신 강의와 유튜브 영상 항상 잘 보고 있습니다. 감사합니다 :)

  • jvm
  • heap
  • permgen
  • metaspace
hk 댓글 1 좋아요 2 조회수 1106

vivado 실행 에러 문의

미해결

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

안녕하세요? Vivado 실행 후 하기와 같은 문제가 발생하였습니다. 인터넷에 검색을 해 보아도 내용이 잘 없어서 질문을 드리게 되었습니다. 해결 방법이 있을까요?

  • jvm
  • verilog-hdl
  • fpga
  • 임베디드
이창진 댓글 1 좋아요 1 조회수 627

자바8 static 변수

미해결

더 자바, Java 8

안녕하세요 백기선님! static변수에 관한 질문이 있습니다 static 변수는 컴파일 시점에 메모리에 안착되어 프로그램이 종료될때 까지 살아있다. 그러므로 static 변수가 점유하고 있는 메모리는 가비지컬렉터에 의해 회수되지 않는다. 로 알고 있습니다. https://openjdk.java.net/jeps/122 아래는 해당링크의 일부 내용을 발췌한 것입니다. Class metadata, interned Strings and class static variables will be moved from the permanent generation to either the Java heap or native memory. The code for the permanent generation in the Hotspot JVM will be removed. Application startup and footprint will not regress more than 1% as measured by a yet-to-be-chosen set of benchmarks. 1. java8 부터는 static 변수/함수를 남발한다는 이유만으로 메모리 부족 문제가 생길 가능성이 희박해 진걸가요? 'static 변수를 남발해도 시스템에 크게 지장이없다?' 2. heap 영역으로 옮겼다면 GC의 관리영역으로 들어와서 mark & swap 인 가능해 진 건가요? 개발자 꿈나무입니다 ! 답변의 수준이 낮더라도 이해 부탁드리겠습니다 ㅠㅠ!

  • jvm
  • java
  • metaspace
  • static
  • java
  • gc
GSP 댓글 1 좋아요 1 조회수 506

인기 태그

인프런 TOP Writers

주간 인기글