Language 23

[3] 긴 함수

본 내용은 인프런 - 백기선님의 리팩토링 강의를 듣고 정리한 내용입니다. 1. 짧은 함수 vs 긴 함수 함수가 길 수록 오히려 더 이해하기 어렵다. 그 이유는 긴 함수의 각 각 문장들을 해석하기 위해 에너지를 많이 써야하고 다양한 함수의 네이밍에 사용된 단어들을 해석하는데 사람마다 지식이 달라 다른 방향으로 해석될 여지가 있다. 짧은 함수는 더 많은 문맥 전환을 필요로 한다. "과거"에는 작은 함수를 사용하는 경우 더 많은 서브 루틴 호출로 인한 오버헤드가 있었다. (그러나 "오늘"에서는 미미함 ) 작은 함수에 "좋은 이름"을 사용했다면 해당 함수의 코드를 보지 않고도 이해가 가능하다. 어떤 코드에 "주석"을 남기고 싶다면, 주석 대신 함수를 만들고 함수의 이름으로 "의도"를 표현해보자 해당 내용에 사용..

Language/Java 2024.01.29

[2] Duplicated Code - 중복코드

효율적으로 코드를 짜기 위해선 앞서 설명한 네이밍 관련 규칙들과 중복된 코드를 줄이는 것이 중요합니다. 이번 챕터에서는 중복된 코드를 줄일 수 있는 방법론 들을 설명했습니다. 중복코드의 단점은 코드의 변경 시, 동일한 모든 곳의 코드를 변경해야합니다. 이러한 단점을 개선하기 위해 사용할 수있는 리팩토링 기술은 다음과 같습니다. Extract Funcation ( 함수 추출 ) - 동일한 코드를 여러 메소드에서 사용하는 경우 Slide Statements ( 코드 분리 ) - 비슷하게 생겼지만 완전히 같지는 않은 경우 Pul Up Method( 메소드 올리기 ) - 여러 하위 클래스에 동일한 코드가 있다면 메소드 올리기 1. 함수 추출하기 "의도"와 "구현" 분리하기 의도와 구현? 어떤 일을 하려는지

Language/Java 2024.01.22

[1] 이해하기 힘든 이름

우리는 코딩을 처음 시작하면 변수명, 메서드명, 클래스 명 등등 여러가지 이름을 고민해서 짓기 마련입니다. 당연히 이름을 지을 때, 해당 기능이나 단위 등 명확하고 직관적인 이름을 짓고싶을 것입니다. 그러나 시간이 지나면 왜 이렇게 지었을까? 라는 의문이 들기도 하지만 우리는 그 순간에 최선을 다해서 네이밍을 했을 것입니다. 위에서 발생한 문제를 해결하기 위해 3가지의 리팩토링 기술을 전수해주고 있습니다 1. 함수 선언 변경하기 (Change Function Declaration) 함수 이름 변경, 메소드 이름 변경, 매개변수 추가,삭제, 시그니처 변경 당연히 좋은 이름을 가진 함수는 이름만 보더라도 이해가 가능할 것이다. 그럼 과연 좋은 이름을 찾아내는 방법이란 무엇인가? - 함수에 주석을 작성한 다음..

Language/Java 2024.01.22

Reflection(리플렉션)이란?

리플렉션(Reflection)이란? 리플렉션은 JVM 메모리 내에 저장된 클래스의 정보를 가지고와서 필요한 정보를 사용하는 자바 API입니다. (여기서 말하는 클래스는 실행중인 자바 어플리케이션의 클래스와 인터페이스의 정보를 가진 클래스) JVM에 의해 클래스가 자동으로 생성되고, 이 Class를 가지고 오는 방법은 다음과 같습니다. Class의 메서드 사용시 주의점은 다음과 같습니다. getMethods와 getDeclaredMethods를 구분할 것 이유는 getMethods같은경우엔 상위 클래스와 상위 인터페이스에서 상속한 메서드를 포함하여 pulblic인 메서드를 모두 거지고 옵니다. 그러나 getDeclaredMethods는 접근 제어자와 상관없이 상손한 메서드를 제외하고 직접 클레스에서 선언한..

Language/Java 2023.04.01

객체 지향적 설계?

Java는 객체 지향적 언어이다. 왜 Java는 객체 지향적 언어일까? 이 객체 지향적 객체 지향이라는 말은 '모든 데이터를 객체로 취급한다'에 중심점을 두고 있다. 객체의 상태와 행동을 구체화해서 이 것을 프로그래밍 하는데 이를 객체 지향 프로그래밍이라 한다. 근데 왜 자바가 객체 지향 언어인가요? 자바에서는 클래스 (class)를 이용해 객체를 정의한다. 이 클래스에는 아까 말했던 상태(state)와 행위(behavior)가 있어야 한다. 그래서 자바는 이러한 클래스와 객체, 객체들 간의 관계를 통해 원하는 결과를 만들어 내고 로직을 구성한다 그래서 대표적인 객체지향 언어라 하면 Java가 떠오르는 것이다. 그럼 장점은 뭔가요? 2022.01.17 - [Language/Java] - 1) 객체 지향 ..

Language/Java 2022.11.21

Python 공부하며 궁금했던 점(2022.11.08 ver_01)

나는 파이썬을 정말로 간단하게만 배웠었다 대학교 (1학년 전공같은 전공아닌 전공?) 그 마저도 GUI를 이용한 간단한 수업이었는데, 그 떄 이후로 거의 벽을 쌓고 살았고, 그나마 공모전? 준비하면서 파이썬을 잠시 써본 것 같다. 그래서일까 파이썬에 대한 지식이 많이 부족했는데, 오늘 파이썬 문법 기초를 수강하며 새로 얻게 된 지식을 글로써 남기고자 한다. (변수나 뭐 이런 완전 기초적인 내용은 제외하고 내가 잘못 알고 있었던 혹은 새로 알게 된 지식에 대해서만 정리) 1. 파이썬은 흔히 우리가 사용하는 변수의 자료형을 명시하지 않는다 (명시를 하지 않아도 알아서 잡아주는게 편리하긴 했다.) 근데 어째서? 보통 파이썬처럼 변수의 자료형을 명시하지 않는 언어를 '동적 타입 언어'라고 한다 (그럼 자연스레 정..

Language/Python 2022.11.08

문자열 나누기 - StringTokenizer

알고리즘 문제를 풀다 궁금한 것이 생겨 이렇게 정리해놓는다. 우리는 여러 방법을 이용해 문자열을 나눌 수 있다. 배열을 이용하면 불필요한 메모리를 사용하게 되어 성능에 이슈가 생길 수 있다. 외에도 split 존재 그래서 문자열을 나누기 위한 방법으로 StringTokenizer을 사용하게 되는데, 이 클래스를 이용해 문자열을 나누게 되면 나누어진 문자열을 토큰이라고 부른다. 참고 : https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html StringTokenizer (Java Platform SE 7 ) Constructs a string tokenizer for the specified string. All characters..

Language/Java 2022.08.03

자료형과 BigDecimal 그리고 소수점(부동, 고정)

자료형 언어마다 다양한 변수의 타입을 지원하며, 값의 범위와 종류는 다르다. 기본 자료형과 참조 자료형으로 나눌 수 있는데 다음과 같다 기본 자료형 (8) = boolean, char, byte, short, int, long, float, doule 참조 자료형 = 기본 자료형을 제외한 나머지 타입(클래스, 인터페이스, 배열, 열거 타입) 기본 자료형은 실제 값을 저장하고, 참조 자료형은 값이 저장되어 있는 주소를 저장한다. 그래서 기본 자료형은 스택 메모리에 저장되며 비 객체 타입이라 null 값을 가질 수 없고, (만약 null 값을 넣고 싶다면 Wrapper Class를 활용해야 한다.) 자료형의 길이가 불변이다. 하지만 참조 자료형은 Null 값을 가질 수 있으며, new를 이용해 생성하는 모든..

Language/Java 2022.05.22

String 과 JVM

1. String 객체의 생성(new , "")과 메모리 속 저장 String은 Java에서 가장 많이 사용하는 클래스라고 해도 과언이 아니다. String의 생성자는 매우 많아서 다 외우는 것보다 필요에 의해 찾아서 사용하는 편이 더 좋다. 일반적으로 Java에서 이 String 객체를 생성하는 2가지 방법이 있다. 1. String literal인 큰 따옴표("")를 사용하는 것. 예시 : String name = "symbol" 2. new 연산자를 이용하는 것. 예시 : String name = new String("symbol") 소스 코드를 직접 작성해서 실행해보면 의문점이 생길 수 있다. 과연 1번과 2번을 통해 생성한 객체에 동일한 문자열을 주고 같다, 다르다를 출력해보면 어떻게 나올까? ..

Language/Java 2022.05.22

예외 처리(Exception)

예외(Exception) 1. 예외(Exceptipn)란? 실생활이나 혹은 코드를 작성하거나, 서비스를 운영할 때 우리가 예상치 못한 방향으로 흘러갈 수 있다. 결국 이러한 예외를 우리가 직접 처리를 해야하는데, 자바에서는 예외(Exception)이라는 것을 던져버린다. 예외는 내부적 혹은 외부적 문제로 인해 발생하는 오류이다. 예외가 발생되면 프로그램은 종료된다는 점에서 에러와 동일하나, 예외는 예외 처리를 통해 프로그램을 종료하지 않고 계속 동작시킬 수 있다. 예시로 null인 객체에 메소드를 호출하거나, 5칸 짜리 배열이 있는데, 6번째 인덱스 값을 출력하라던지 등이 여기에 포함된다. 자바를 맛 본 사람이라면 대충 어떤 방식으로 예외 처리가 진행되는지 알 것이다. = try - catch 다음과 같..

Language/Java 2022.05.15