안녕하세요. 다메카솔🐿️ 입니다.

개발을 처음 시작할 때 추천받고 읽기 시작했지만 완독에 굉장히 오래 걸렸던 책 객체지향 사실과 오해 입니다.

 

https://product.kyobobook.co.kr/detail/S000001628109

 

객체지향의 사실과 오해 | 조영호 - 교보문고

객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝

product.kyobobook.co.kr

 

독서기간 : 2023.05 ~ 2024.02

독서시간 : 10H +

평점 : ★★ ☆☆

한줄평 : 개발자 추천서에 꼭 들어가지만 읽기 쉽지 않은 책

 

객체지향 프로그램을 할 때 어떤 관점으로 프로그램을 바라보고 개발을 해야 더 생산성이 높을까?
자바를 처음 배울 때 클래스 생성부터 시작하여 메인함수 구현, 자동차나 붕어빵 클래스를 만들어서 객체들을 생성하고 값을 할당하는 등 기본 문법을 익혀나갑니다.


기능구현을 할 수 있게되고 프로그램을 작성하게 되면서 기능개발, 유지보수, 요구사항 변경 등 생산성에 대한 고민을 하게 되는데 이때 변화하는 요구사항에 유연하고 읽기 쉬운 코드, 견고한 프로그램을 작성할 수 있는 패러다임에 대해 앞서 나간 선배 개발자가 후배들에게 여러 예시로 설명을 해주는 내용이었습니다.


저는 보통 책을 읽을 때 출퇴근 시간에 읽는데, 내용이 추상적이고 예시가 많고 비슷하게 보이는 내용의 작은 차이들을 설명하는 글들이 많아 출퇴근때 읽기에는 가독성이 좋지 않아 완독에 많은 시간이 걸렸습다.
너무 자주 책을 덮는 일이 반복되어 왜이리 안읽히지 고민을 해보았는데 든 생각은 초보자가 읽기에는 다소 내용이 딱딱하게 느껴졌고, 어느정도 배경지식이 있어야 독서효율성이 나올 것 같습니다.


내용은 분명 알찬 책이지만, 읽기 쉬운 코드, 바보처럼 단순한 코드가 좋은 코드, 유지보수하기 쉬운 코드라 말하는 개발자의 관점으론 과연 독자에게 좋은 책인가? 라는 의문이 듭니다.
내공이 얕아서 그럴 수 있어 한 1~2년 뒤에 다시 한번 읽어볼 생각입니다.

가끔 인터페이스를 보다보면 Serializable 이란 인터페이스를 상속한 클래스를 볼 수 있었다.

검색해봤을땐 직렬화를 가능하게 해주는 인터페이스고, 그렇게 하여 파일이나과 인터넷으로 객체를 저장할 수 있다는 설명을 보았는데, 의문점이 모두 해결이 안되서 조금 더 찾아보았다.

Serializable(직렬화)란?

객체를 직렬화 한다는 것은 객체의 상태바이트스트림으로 변환한다는 의미이다.

그럼으로써 바이트 스트림은 객체의 복사본으로 재변환될 수 있다.

 

Serialization & Deserialization in Java diagram

 

쓰임

바이트 스트림은 데이터를 송수신하거나 파일에 저장하는데 사용한다.

따라서 직렬화는 객체를 파일에 저장하거나(File.java, ObjectInputStream.java), 인터넷에 정보를 보내거나(URI.class), 데이터베이스에 저장할 떄(Hibernate, JPA, EJB)등에 사용하게 된다.

실제로 자바에서 Serializable 인터페이스를 구현한 클래스들을 찾아보면 확인할 수 있다.

 

file.java in IntelliJ Search

 

URI.java in IntelliJ Search

hibernate-mapping-3.0 dtd in IntelliJ Search

Use of Serialized Object

 

SeriaVersionUID

직렬화 실행은 각각의 직렬화 클래스의 SeriaVersionUID 라고 불리는 버전 번호와 연관되어 있다.

신뢰성을 위해 직렬화와 역직렬화 후 SeriaVersionUID를 비교하는데 이때 불일치하게되면 InvalidClassException이 발생하게 된다.

serialVersionUid는 static, final, Long으로 선언해야 한다.

ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;

명시적으로 SeriaVersionUID을 선언하지 않으면 기본값이 생성되긴 하지만, 이는 다양한 컴파일러구현체에 민감하게 영향을 받기 때문에, 직접 명시적으로 선언할 것을 강하게 권장하고 있다.

If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization.

 

참고

 

 

'IT > JAVA' 카테고리의 다른 글

[Java] Cannot construct instance of `class`  (1) 2023.11.18
[Mybatis] CDATA 란?  (0) 2023.03.15

디자인패턴(Design Patterns)

소프트웨어 공학에서 디자인패턴은 소프트웨어 디자인에서 발생하는 문제에 대해 일반적으로 재사용가능한 솔루션을 말한다.
디자인패턴은 그대로 코드에 변환하여 사용할 수 있는 완성된 디자인은 아니지만,
수많은 각기 다른 상황들에서 문제를 어떻게 풀 것인가를 말해주는 기술(description) 혹은 탬플릿이다.

디자인 패턴의 활용

디자인패턴은 개발과정에서 테스트되고 입증된 개발 패러다임을 제공하여 개발속도를 향상시킨다.
효과적인 소프트웨어 디자인은 구현 후반부에도 보이지 않을수 있는 이슈들도 고려해야 한다.
디자인패턴의 재사용은 큰 문제를 야기할 수있는 파악하기 힘든 이슈들을 예방하는데 도움을 주며
이미 디자인패턴에 친숙한 개발자들에게 코드가독성을 향상시켜준다.

디자인패턴의 분류

디자인패턴은 크게 3가지로 분류된다.

생성 패턴 (Creational patterns)

2021.07.03 - [분류 전체보기] - [Design Pattern] 생성패턴(Creational pattern)

생성 패턴은 클래스생성에 관한 분류그룹이다.

구조 패턴(Structual patterns)
구조 패턴은 클래스와 객체들의 구조에 대한 분류그룹이다.

행위 패턴(Behavioural patterns)
행위 패턴은 객체들의 커뮤니케이션에 관한 분류그룹이다.

 

wikipedia : software design pattern

https://en.wikipedia.org/wiki/Software_design_pattern

+ Recent posts