분류 전체보기 560

[CleanCode]경계 1

외부 코드 사용하기 2024.09.29 - [☕ 자바 JAVA/☕ 변수와 자료형 Variables & Data Type] - [JAVA]Map가장 많이 쓰이는 Map을 통해 알아본다.Map의 기능성과 유연성이 유용한만큼 위험도 크다.사용자는 Map 내용을 지우거나 추가할 수 있다. 2024.09.30 - [☕ 자바 JAVA/☕ 변수와 자료형 Variables & Data Type] - [JAVA]제네릭 Generic하지만 이 방법도 사용자에게 필요하지 않은 기능까지 제공한다.Map를 사용하는 하위 클래스가 많을 수록Map가 변경될 시 수정할 코드가 많아진다.Map을 클래스 안으로Map sensors = new HashMap()를 Class 안으로 넣은 것입니다.따라서 Map 인터페이스가 변하더라도 나머지..

📜 CleanCode 2024.10.01

[JAVA]Generic<T> & Wild card<?>

Collection(Map/Set/List)에서의 Generic : 개발자가 Type을 지정한다.     장점  제네릭이 없는 List에 여러가지 타입의 값을 담았을 경우,int hello = (int) lst1.get(0);와 같이 형변환시에 ClassCastException이 일어납니다.제네릭을 이용해 하나의 타입으로 지정하면 컴파일 시, 지정한 제네릭을 사용하는 지 Type검사를 합니다.제네릭을 Collection(Map/Set/List)에 사용하면, 지정한 Type만을 사용할 수 있지만오류방지와 사용에 수월합니다.만약 제네릭을 사용하지 않을 시 Collection사용 시 값의 타입이 무엇인지 확인 후 사용해야 하겠죠.또한 제네릭을 보고 어떤 타입을 사용하고 있는 지 바로 확인 할 수 있습니다.  ..

[CleanCode]오류처리-정상 흐름을 정의하라

특수 사례 패턴Special Case Pattern특수 사례 패턴이란?클래스나 객체로 조작해 특수 사례를 처리하는 방식이다.한마디로 예외가 아니라 코드로 해결할 수 있다면, 예외적인 상황을 캡슐화해서 처리하길 권장한다.null을 반환하지 마라대신 Colloections.emptyList()를 반환하라null을 반환하는 코드는 일거리를 늘리고 호출자에게 문제를 넘겨버린다.누구 한명이라도 null확인을 빼먹는다면 애플리케이션은 통제 불능 에러가 될 수 있다.Collections.emptyList()반환타입이 List라서 쿼리로 뭔가를 조회해서 사용할 때 정말 좋을 것 같습니다.정확히는 Dao에서 조회된 자료를 처리하면서 적기 적합할 것 같구요.* 하지만 우선 쿼리가 정상작동하는 지 확인을 다 하고나서 추가하..

📜 CleanCode 2024.09.28

[CleanCode]오류처리-예외사용법

미확인unchecked예외를 사용하라 Python, C#, C++ 모두 예외를 지원하지 않지만 안정적인 소프트웨어를 구현하고 있다.또한 확인된 예외를 최하위 함수라며 상위 함수 모두를 수정해야 하는 연쇄작용이 일어나OCP(소프트웨어 개체는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다)를 위반한다.따라서 확이된 예외를 사용할 경우에는 그만큼 연관함수들도 수정해야하는 비용이 발생한다.하지만 중요한 라이브러리를 작성하다면 확인된 예외도 유용하다.예외에 의미를 제공하라예외를 던질 때 전후 상황을 충분히 덧붙인다.Java는 모든 예외에 호출 스택을 제공하지만그 외에도 오류 메시지에 정보를 담아 함께 던진다.ex)"프로세스 중 오류 발생: 0으로 나눌 수 없습니다."Exception의 prin..

📜 CleanCode 2024.09.27

[CleanCode]오류처리-오류코드보다 예외(try/catch&throws)를 이용하라

시작하기에 앞서 이 글을 간단히 보시면 좋을 것 같습니다.2024.09.25 - [☕ 자바 JAVA/☕ 클래스와 함수 Class & Method] - [JAVA]예외 & 에러, throw & throws오류 코드보다예외를 사용하라오류 플래그를 설정하거나INVALIDDEVICE_SUSPENDED호출자에게 오류 코드를 반환하는 방법이 전부였다.logger.log(Level.WARNING, "Device suspended. Unable to shut down");함수를 호출한 즉시 오류를 확인해야 하기 때문에한 마디로 함수를 호출해 사용하기 까다로워 진다.따라서 오류가 발생하면 예외를 던지는 편이 낫다.위의 코드를 구현해보면서..throws를 사용하려면 main()에서도 예외를 사용해야 한다고 컴파일에러가 뜨..

📜 CleanCode 2024.09.25

[JAVA]예외처리:throw & throws, try-catch.

throw: 강제 예외처리throws: 예외를 throws 옆에 적은 class로 넘깁니다.try/catch문을 이용해 예외처리예외의 흐름main()에서 method1을 호출 하고, method1이 method2를 호출합니다.main → 1() → 2()method2에서 강제로 예외를 발생시키면 try-catch문으로 예외를 처리하지 않았기 때문에,→ method2를 호출한 method1에게 예외를 떠넘깁니다.method1에서도 예외를 처리하지 않았기 때문에 →  main으로 예외를 떠넘깁니다.main 또한 예외를 처리하지 않기 때문에→ jvm에 예외를 떠넘겨 결국 프로그램은 비정상 종료합니다.※ 결론throws는 결국 예외를 어디에서 처리할 지를 정하는 곳이지 예외를 처리하진 못합니다.예외가 발생했을 ..

[CleanCode]객체와 자료구조 2

디미터 법칙Law of Demeter: 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.객체는 자료를 숨기고 함수를 공개한다.즉, 객체는 조회함수로 내부 구조를 공개하면 안된다는 의미다.대표적인 휴리스틱이다.휴리스틱  Heuristic완벽하진 않지만, 일반법으로 좋은/간단한 해결법을 말한다.자세한 예시로클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.클래스 Cf 가 생성한 객체f 인수로 넘어온 객체C 인스턴스 변수에 저장된 객체하지만 위 객체에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안된다.복잡한 듯이 보이지만 디미터 법칙을 위반하는 사례만 피하면 된다.클래스 A→B에서 조회를 했다면 B에 있는 자료만 가져와야지A→B→C조회를 하면 안된다는 거다.한마디로 코드가 꼬인 ..

📜 CleanCode 2024.09.23

[CleanCode]객체와 자료구조 1

각 변수마다 get/set 함수를 제공한다면 구현을 외부로 노출하는 셈이다.변수 사이에 함수를 넣는다고 구현이 감춰지진 않기에 추상화가 필요하다.객체 ↔ 자료구조객체Object는 추상화 뒤로 숨긴 채 함수만 공개한다.자료구조는Data structure 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다.두 개념은 거의 정반대다. 아래 같은 내용의 코드를 절차지향/객체지향 구조로 알아보자.절차지향 구조객체지향 구조 이렇듯 객체지향/절차지향 구조는 반대되며 각 장단점을 가지고 있다.절차적인 코드는 기존 자료구조(도형)를 변경하지 않으면서 새 함수를 추가하기 쉽고↔ 자료 구조 class를 추가하면 함수를 모두 변경해야 한다.객체지향은 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.↔ 새로운 함수를..

📜 CleanCode 2024.09.23

[CleanCode]형식 맞추기

코드 형식은 의사소통이다프로젝트가 커질 수록 수많은 개발자들이 만든 클래스를 보게 될 텐데 개발자마다 고유의 스타일로 코드를 적어두었다면 상당히 읽기 힘들 겁니다. 그래서 개발초기에 tab의 크기와 font, 주석형식을 모두 정해두고 진행합니다. 그걸 일일히 검사할 수는 없으니까 sonarQube를 이용해 형식을 검사하면 형식에 맞지 않는 코드들을 찾을 수 있습니다.적절한 행(세로) 길이 Lines책에 따르면 우리가 많이 사용하는 tomcat 등 거대한 시스템도 클래스의 길이가 대개 200줄을 넘지 않는다. 작은 파일들로도 대규모 시스템을 만들 수 있다는 증거다.가로 형식 맞추기신문 기사처럼 작성하라독자는 신문을 위에서 아래로 읽는다.최상단에 가장 큰 표제가 간단한 설명이 적혀있다.이름은 간단하면서도 설..

📜 CleanCode 2024.09.21

[CleanCode]나쁜 주석

주절거리는 주석작성한 개발자가 아니며 이해가 안 되어 다른 모듈까지 뒤져야하는 주석은 좋지 않다.같은 이야기를 중복하는 주석.있으나 마나 한 주석 오해의 여지혹은살짝 잘못된 정보가 담긴 주석의무적으로 다는 주석이력을 기록하는 주석2024.10.14 - [🛠 도구/➰ Visual Studio] - [VScode]GitLens위치를 표시하는 주석공로를 돌리거나 저자를 표시하는 주석주석으로 처리한 코드HTML주석전역 정보주석을 달 땐 근처에 있는 코드만 기술하라.시스템 전반적 정보를 기술하지 않아야 한다.ex) 포트값 정보 등너무 많은 정보모호한 관계함수 헤더

📜 CleanCode 2024.09.20
반응형