본문 바로가기

자바4

[Java] 왜 배열은 Covariant(공변)이고 제네릭은 Invariant(불공변)일까? 자바에는 Variance(변성)이라는 개념이 있다. 변성은 타입의 계층 관계에서 서로 다른 타입 간에 어떠한 관계가 있는지 나타낸다. 변성의 개념은 자바의 Generic에서도 사용된다. 오늘의 주제인 Covariant(공변), Contravariant(반공변), Invariant(불공변)는 모두 변성의 한 종류이다. 각각의 개념을 간단하게 설명하면 아래와 같다. Covariant - SubType[]은 SuperType[]이다. (ex - String[]은 Object[]이다.) Contravariant - SuperType[]은 SubType[]이다. (ex - Object[]은 String[]이다.) Invariant - SubType[]은 SuperType[]이 아니고, SuperType[]은 Su.. 2022. 7. 22.
[Java] Covariant Return Type이란? 객체지향 프로그래밍에서 메소드의 Covariant Return Type이란 서브 클래스에서 오버라이딩된 메소드의 리턴 타입을 “더 좁은" 타입으로 지정할 수 있는 것이다. * 자바의 Covariant(공변)에 대한 자세한 내용은 다음 게시글을 보면 도움이 된다. 자바에서 Covariant Return Type은 Java 1.5부터 허용되었다. 코드로 확인해보자. 예를 들어 B가 A를 상속받는 subclass라고 하고, A타입을 반환하는 C의 get() 메소드를 오버라이딩할 때 똑같이 A를 반환하지 않고 A의 서브타입인 B를 반환해도 문제가 발생하지 않는다. (원래 오버라이딩한 메소드에서 리턴타입이 맞지 않을 경우 컴파일 타임에 The return type is incompatible with ... 라는.. 2022. 7. 15.
[Javascript] Javascript Date → Java LocalDate/LocalDateTime 변환 오류 프로젝트를 진행하다가 자바스크립트에서 Date 타입 변수를 자바로 보낼 때 typeMismatch 에러가 발생하였다. 사내 프로젝트를 진행하다가 발생한 에러이기 때문에 간단한 예제로 해당 오류를 재연해 보았다. 에러 Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult typeMismatch Field error in object 'reservation' on field 'checkInTime' Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanP.. 2021. 8. 12.
[Java] Overloading과 Overriding 공통점과 차이점 공통점 method 정의 시 이름을 같게 정의한다. 사용이 편리하다. 다형성 효과 Overriding(메서드 재정의) super class의 메서드를 sub class에서 재정의해서 사용하는 것 상속이 전제가 되어야 한다 상속받은 메서드와 전체적인 기능은 동일하지만 상세 구현이 다를 경우 기존의 상속 받은 메서드를 사용할 수 없으므로 새로운 메서드를 추가로 선언해야 한다. 규칙 메서드명, 인자, 리턴 타입을 동일하게 선언 Access Modifier(접근 제한자)는 부모와 같거나 부모보다 넓은 범위로 정의 부모 메서드와 같은 예외를 던지거나 예외를 안던진다. 리턴 타입 1.7 버전 : 상속 받은 메서드와 리턴 타입이 반드시 같아야 한다. 1.8 버전 : 상속 받은 메서드와 리턴 타입이 같거나 sub를 리.. 2021. 7. 11.
반응형