목록📖 book (9)
infinity : 무한한 성장가능성
2.1 리팩터링의 정의 리팩터링은 명사와 동사의 뜻을 가지고 있다. 리팩터링[명사]: 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 리팩터링[동사]: 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다. -> 위에서 정의한 리팩터링의 뜻을 보면, 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 작업이 끝나지 않았더라도 언제든 멈출 수 있다. 2.3 리팩터링 하는 이유 리팩터링은 소프트웨어의 모든 문제점을 해결하는 만병통치약은 절대 아니다. 하지만 코드를 건강한 상태로 유지하는 데 오와주는 약임은 분명하다. 1) 리팩터링하면 소프트웨어 설계가 좋아진다. 2) 리팩터링하면 소포트웨어를..
예전에 스터디하면서 책을 읽었던 기억은 있는데.. 많이 까먹기도 했고, 최근 진행한 프로젝트를 리팩터링 하고 싶다는 생각이 들었고, 리팩터링 책을 읽으며 적용해 보는 건 어떨까 싶어 책을 다시 읽으며 정리해보려고 한다! 😄 책에서는 간단한 공연료 청구서를 출력하는 코드를 예로 들어준다. function statement(invoice,plays){ let totalAmount = 0; let volumeCredits = 0; let result = `청구내역 ( 고객명: ${invoide.customer})\n`; const format = new Intl.NumberFormat("en-Us",{style:"currency",currency:"USD", minimumFractionDigits:2}).fo..
자료 추상화 변수 사이에 함수라는 계층을 넣는다고 구현이 감춰지는 것이 아니다. -> 구현을 감추기 위해서는 추상화가 필요하다 -> 즉, 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료를 조작할 수 있어야 진정한 의미의 클래스이다. -> 하지만, 인터페이스나 조회/설정 함수만으로 추상화가 이뤄지는 것은 아니고 개발자는 객체가 포함하는 자료를 표현할 좋은 방법을 선택해야 한다. public interface Vehicle { //조회함수 제공한다고 추상화가 되는 것은 아닌.. 예 double getFuelTankCapacityInCallons(); double getGallonsOfGasoline(); } public interface Vehicle { // 좋은 추상화의 예 double getPe..
자바에서 인터페이스와 관련된 메서드는 한 몸처럼 구성됨 즉, 인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드를 구현 or 슈퍼클래스(부모클래스)의 구현을 상속받아야 함 만약, 인터페이스에 어떤 메서드를 추가한다면? 인터페이스를 상속하는 모든 클래스가 해당 메서드를 추가로 구현해야하는 문제 발생 즉, 모든 클래스에 변경이 생긴다.. 위의 문제를 해결하기위해 자바 8에서는 인터페이스를 정의하는 두 가지 방법을 제공한다. 첫번째 방법) 인터테이스 내부에 정적 메서드를 사용하는 것 두번째 방법) 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드를 사용하는 것 디폴트 메서드란? 1) 인터페이스 안에 default라는 키워드로 시작한다. 2) 메서드 바디를 포함한다. ->디폴트 메서드 예 ..
철자 규칙은 패키지, 클래스, 인터페이스, 메서드, 필드 타입 변수의 이름을 다루는데 이 규칙들은 특별한 이유가 없는 한 반드시 따라야 한다. 👉 패키지와 모듈 패키지와 모듈이름은 각 요소를 점(.)으로 구분하여 계층적으로 짓는다. 요소들은 모두 소문자 알파벳 혹은 (드물게) 숫자로 이뤄진다. 조직 바깥에서도 사용될 패키지라면 조직 인터넷 도메인 이름을 역순으로 사용한다. ex) com.google 예외적으로 표준 라이브러리와 선택적 패키지들은 java와 javax로 시작함 패키지 이름의 나머지는 해당 패키지를 설명하는 하나 이상의 요소로 이뤄지는데 각 요소는 일반적으로 8자 이하의 짧은 단어로 함 ex) utilities 보다는 util 처럼 의미가 통하는 약어를 추천' 여러 단어가 포함된 이름이라면 ..

중첩 클래스: 다른 클래스 안에 정의된 클래스를 말함 중첩 클래스는 자신을 감싼 바깥 클래스에서만 쓰여한다 종류 정적 멤버 클래스 비정적 멤버 클래스 (inner class) 익명 클래스(inner class) 지역 클래스 (inner class) 🤔 책에서는 설명하지 않지만.. 갑자기 위의 4종류가 헷갈려 책을 찾아 공부한 내용을 추가한다ㅎㅎㅎ 중첩 클래스와 네스티드 클래스는 동일한 말이다.. class Outer{ class Nested{...} // 네스티드 클래스 } 네스티드 클래스는 static 선언 여부를 기준으로 나뉜다. 1) static 네스티드 클래스 (정적 멤버 클래스) 2) Non-static 네스티스 클래스 (비정적 멤버 클래스, 익명 클래스. 지역 클래스) 요기서! Non-stat..

🤔 불변 클래스란? 그 인스턴스의 내부 값을 수정할 수 없는 클래스 즉, 불변 클래스에 간직된 정보는 고정되어 객체가 파괴되는 순간까지 절대 달라지지 않는다. 🧐 불변 클래스의 장점 가변 클래스보다 설계하고 구현하고 사용하기 쉽고 오류가 생길 여지가 적고 훨씬 안전하다. ->라고 책에서는 말하는데, 사용하기 쉽고 오류가 생길 여지가 적고 훨씬 안전 한건 객체 내부 값이 변경되지 않기 때문에 생기는 장점인 거 같은데 왜??? 가변 클래스보다 설계 및 구현이 쉬운 걸까? 이것도 불변이기 때문에 생기는 장점인데, 객체의 값이 변동되지 않도록 사용하는 방법 중 하나인 방어적 복사처럼 에러 상황에 대한 처리를 많이 고려하지 않아도 되기 때문 아닐까? 추측해본다. 🤔 클래스를 불변으로 만들기 위한 방법 객체의 상태..
1. 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 존재한다. ex) java.lang.Math, java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있음 2. 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수도 있음 ex) java.land.colletcions 3. final 클래스와 관련한 메서드들을 모아놓을 때도 사용 -> final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 때문 (final 클래스는 상속이 불가능하기 때문) 이렇게 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다. 하지만 생성자를 명지하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다..
클래스는 객체의 팩토리이다. 이 챕터에서 이해할 부분은 클래스는 객체의 팩토리라는 것이다. 클래스는 객체를 생성하는데 이것을 클래스가 객체를 인스턴스화 한다고 표현 책에서 간단하게 클래스에서 생성자가 표현된 코드를 보여준다. class Cash{ public Cash(int dollars){ //... } } Cash five=new Cash(5); 위의 예제는 Factory 패턴이라고 부르는 디자인 패턴과 다른 패턴 왜 위의 예제는 Factory라고 부르는 디자인 패턴과 다른 것인가? → new 연산은 오로지 객체라고 불리는 클래스의 인스턴스를 생성하는 것뿐이라... Java에서 Factory 패턴이란? new 연산자를 확장한 것처럼 동작 Factory패턴은 부가적인 로직을 더할 수 있기 때문에, ne..