언어(Language)/JAVA

myGoodPlace
[JAVA] ISP vs 다형성
객체지향의 꽃은 다형성이라고 한다.그런데, 객체지향 프로그래밍의 SOLID원칙과 다형성이 계속 함께 갈 수 있을까? 객체지향 프로그래밍의 5가지 원칙인 SOLID원칙을 다시 생각해보자.하나의 클래스는 하나의 책임만 가지게 만들어, 여러 액터들에 의해 수정이 일어나지 않도록 해야한다는 단일 책임 원칙변경(수정)에는 닫혀있고, 확장에는 열려있도록 해야한다는 개방 폐쇄 원칙상속받은 자식 클래스를 업캐스팅해서 부모 클래스의 메서드로 사용해도, 원래의 의도대로 동작이 될 수 있어야 한다는 리스코프 치환 원칙인터페이스를 구현하여 객체를 만들기 위해서는 무조건 모든 메서드를 오버라이딩 해야하기 때문에, 최대한 목적과 용도에 맞도록 인터페이스를 분리하여 불필요한 구현을 하지 않도록하자는 인터페이스 분리 원칙어떤 클래스..
[JAVA] JPA는 무엇일까?
지금까지 저는 JPA가 Spring(이하 스프링)의 기술이라고 생각했습니닷! 그래서 아.. 스프링 못하니까 JPA는 어림도 없겠지.. 라며 엄두도 못냈었죠..ㅎㅎ 알고보니, JPA는 JAVA의 기술이었습니다!! Spring에서 사용하는 JPA는 Spring Data JPA인데 우리가 줄여서 JPA라 부르는 것일뿐..!그럼 JPA가 무엇인지, 어떻게 Database에 객체를 저장할 수 있는지 제가 이해한 것을 함께 나눠보도록 하겠습니다!JPA란 무엇인가JPA란 Java Persistence API의 축약어입니다.자바 Persistence API..? 자바 Persistence하는 API..? Persistence..? 이게 영속성인 것 같은데..사전을 찾아봤습니다.아, 영속이라는 말대신 지속이라는 말로 바..
[JAVA] Optional, 사용하는 이유와 메서드 5가지
Optional를 왜 사용해야 하는지 정리해보자! public final class Optional { ... } 공식 문서 API Note Optional is primarily intended for use as a method return type where there is a clear need to represent "no result," and where using null is likely to cause errors. A variable whose type is Optional should never itself be null; it should always point to an Optional instance. 옵셔널은 주로 메소드의 리턴 타입으로 사용하기위해 의도된거야근데 어느 메소드냐..
[JAVA] 예외(Exception)는 어디서 처리하는게 좋을까?
Controller - Service - Repository 중 예외를 어디서 처리해야할까? “나만(너희들은 안 하는) 할 수 있는 일은 내가 하고, 네가(자주) 하는 일이면 내가 넘겨줄게!” 하나의 계층에서 예외 처리를 모두 담당하지 않고, 모든 계층이 역할을 분담한다. 예외 발생 시 어느 한 계층에서 예외를 모두 처리하는게 아니라, 해당 계층의 역할과 관련되거나 그 계층에서만 하는 예외에 대한 처리라면 일부 처리를 해준 후에 예외를 상위 계층으로 던지다. 그리고 상위 계층은 이러한 예외 처리를 받아 예외 처리에 대해서 공통적으로 처리하면 되지 않을까?! Service에서 예외를 모두 처리하게 될 때, HTTP Status Code를 응답으로 전해줘야할 경우를 생각하여 Controller에서 예외를 모..
내가 생각하는 SOLID원칙
SOLID란, 로버트 마틴이 정의한 객체 지향 설계의 중요한 원칙을 두문자어로 표현한 것이다. SOLID 원칙을 단순히 외우는 것을 넘어, 이번 기회에 이 원칙을 이해하고, 다른 개발자 친구들과 함께 서로가 생각하는 SOLID원칙에 대한 생각을 공유하는 시간을 가져보았다. 이러한 시간을 가지며, 좁게만 생각했던 SOLID원칙에 대해 조금은 더 넓게 확장해서 생각할 수 있게 되었고, 각각 다른 개념이라고 생각했던 것이 사실은 모두 이어지는, 연관된 개념이라는 것을 깨닫게 되었다. SOLID의 핵심, 즉 객체 지향 설계의 핵심은 분리에 있다고 생각한다. 그리고, SOLID라는 개념은 하나의 원칙을 지킴으로써, 모두 다 지켜질 수 있는 연관된 개념이다. SRP를 잘 지키기 위해서 분리를 하고, 인터페이스를 만..
[JAVA] 생성자도 상속이 된다는 입장에서 쓰는 글
상속을 어떤 관점에서 보느냐에 따라 생성자도 상속이 된다 vs 생성자는 상속이 되지 않는다 로 의견이 나뉜다. 생성자는 상속이 되지 않는다. 의 입장 상속은 슈퍼 클래스의 멤버를 서브 클래스가 그대로 사용을 하거나 필요에 따라 추가해서 사용할 수 있어야하기 때문에, 생성자는 상속이 아니다. 라고 말한다. 나는 메모리 관점에서 생성자는 상속이 된다 라는 입장이다. 첫 번째, 생성자는 클래스명으로 된 특별한 메서드다. 클래스가 로드될 때, 메서드 영역에 메서드와 함께 생성자가 포함되어 저장된다. 즉, 생성자는 메서드와 같은 메모리 공간에 존재하며 용도가 조금 특별할 뿐이다. 두 번째, 생성자와 메소드를 호출하는 방식이 동일하다. 객체가 갖고 있는 메서드를 실행할 때에는, 힙 영역에 해당 메서드의 주소값을 가..
ERROR: Exception in thread "main" java.lang.ClassCastException
Exception in thread "main" java.lang.ClassCastException: class [I cannot be cast to class java.lang.Comparable ([I and java.lang.Comparable are in module java.base of loader 'bootstrap') Exception in thread "main" java.lang.ClassCastException: class [I cannot be cast to class java.lang.Comparable ([I and java.lang.Comparable are in module java.base of loader 'bootstrap')   자바에서 알고리즘을 풀 때, 보통은 클래..
[Java] Java는 컴파일과 인터프리터 중 어떤 언어에 속할까?
대표적인 컴파일 언어로는 C, C++ 이 있고, 인터프리터 언어로는 python이 있다. 그러면 Java는 컴파일 언어일까? NO, 컴파일만 사용하지 않으므로, 컴파일 언어라고 할 수 없다. JVM에서 인터프리터를 사용하여 코드를 해석하는 과정이 있다. 1. A.java 이름의 자바파일을 A.class의 클래스 파일로 변환하는 과정이 javac인 컴파일러가 컴파일하는 과정 2. 자바를 실행했을 때, 바이트코드를 한 줄씩 읽고 해석하는 것을 인터프리터가 한다. 3. JVM에 존재하는 JIT(Just In Time) 컴파일러는 인터프리터의 속도부분에서 느리다는 단점을 보완하기 위한 것으로, 인터프리터가 운영체제에 맞는 기계어 코드로 생성할 때, 반복되는 작업이라면 해당 기계어 코드를 캐싱하는 역할을 수행한다.
sooyeon-kr
'언어(Language)/JAVA' 카테고리의 글 목록