자바 11

[1] 이해하기 힘든 이름

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

Language/Java 2024.01.22

Java 8 vs Java 11 ?

우리가 프로젝트를 진행하다보면 여러 라이브러리와 언어의 버전과 관련된 선택을 해야하는 경우가 발생합니다. 누군가는 버전업되면 다 좋은거 아니야? 라고 생각할 수있지만, 개발자들은 이를 하나하나 따져보고 적절한 trade off를 통해서 사용하고자 하는 도구들의 버전을 선택해야 한다고 생각합니다. 이 글은 자바의 버전 선택과 관련된 내용을 담고있습니다. Java라는 언어를 사용하는 사람들은 자바가 객체지향 언어인 것도 알고있고, 이식성의 장점이나 메모리를 자동으로 관리해주는 장점 등을 알고있다. 오늘은 이러한 부분을 넘어선 자바 8과 자바 11 버전을 비교해서 학습한 내용을 정리하려고 한다. 자바의 버전 현재까지 자바는 19버전까지 출시되어 있으며 올해 3월 20 버전이 출시된다고 알려저있다. 자바는 각 ..

[자바 웹 프로그래밍 - Next Step] - 테스트와 리팩토링

서비스를 개발하다 보면 우리는 구현한 기능 혹은 메소드를 테스트해야할 경우가 발생할텐데, 이는 개발자로서 중요한 순서이자 역량이다. 하지만 이를 접하지 않는다면 코드 구현력은 물론 더 큰 문제가 발생할 가능성이 높다. 그래서 테스트를 통해 내가 만든 기능들이 올바른 방향으로 흘러가는지에 관해 check 할 필요가 있는데, 이 과정 속에서 Test가 중요하다. 또한 내가 만든 메소드가 비효율적이라면 이는 추후 큰 비용의 발생을 야기할 수 있다 (내가 말하는 큰 비용이라하면 유지보수나, 사용되는 리소스를 의미한다.) 그래서 개발자 입장에선 불필요하거나, 책임에 맞지 않는 코드를 사용하는 것을 줄여야한다. 간단한 예제를 통해 문제점을 발견하고 직접 Test, refactoring까지  경험해 보았다. publ..

책 읽기 2022.12.27

객체 지향적 설계?

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

Language/Java 2022.11.21

백준 - 2577번

https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net 설명 : 세 자연수 A, B, C의 곱을 계산한 후 결과값에 0~9가 몇 번씩 쓰였는지를 구하는 문제 내 생각 : 우선 ABC를 입력받아야 하고, 입력받은 ABC를 곱한 값을 저장해야한다고 생각했다. 그래서 생각한 것이 "결과 값을 다시 문자열로 변환하고, 이 문자열을 한 문자씩 쪼개서 배열에다가 저장해야겠다"라고 생각했다. 코드를 작성하면서 왜이렇게 복잡해지고 불필요한 느낌이 들지? 라는 쎄한 생각이 들었다... 그렇게 한 문자씩 배열에 저장함과 동..

인터페이스와 추상클래스 그리고 Enum

1. 인터페이스(interface)란? 한 클래스가 다양한 클래스를 상속받아 다양한 기능을 사용하면 얼마나 좋을까? 하지만 다중 상속을 자바에서는 지원하지 않는다. 그래서 자바에서는 인터페이스를 이용해 다중 상속을 지원하고 있는데, 인터페이스(interface)는 클래스와 달리 객체를 생성할 수 없는, 클래스에서 구현해야하는 일종의 작업 명세서이다. 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상클래스이다. (인터페이스와 상속은 엄연하게 다름!) 상속이 부모 클래스의 기능을 자식 클래스가 물려 받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다. 일반적으로 인터페이스는 이렇게 구현한다. (추가적으로 인..

Language/Java 2022.05.14

스프링 부트의 테스트 코드(부제 : JUnit), 책: 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

결국 테스트 코드를 작성하는 이유는, 기능이 잘 동작하는지 확인을 하기 위함이다. 테스트 코드는 내가 작성한 로직이나 기능들을 테스트 코드를 통해 잘 동작하는지 확인해보는 것이다. 테스트 코드 작성 전 개발 방식은 보통 1. 코드의 작성 2. 프로그램 실행 3. 테스트 도구를 통해 HTTP 요청 (Postman) = 브라우저를 통해 서버에 접속하고 테스트 대상 메소드를 동작시키는 요청 4. 요청 결과를 System.out.println()을 통해 눈으로 확인. 5. 결과가 이상하면 프로그램 실행을 중지하고 코드를 수정 이런 방식으로 많이 진행 되었는데, 테스트 코드를 작성하게 되면, 1. 코드를 작성 2. 테스트 코드의 작성 후 실행 3. 결과에 따른 동작(코드를 수정한다, 정상 작동하니 다음 로직을 개..

스프링/백엔드 2022.02.10

Compile과 implementation의 차이점

현재 인프런이라는 강의 서비스에 CTO로 계신 김동욱님의 책인 '스프링부트와 AWS로 혼자 구현하는 웹 서비스' 라는 책을 통해 다시 웹 백엔드 부분을 공부하고 있다.(유툽에서 분명히 많이 본 이름이였는데, 아 그분? 하면서 얼굴이 떠올랐다. 그분이 그 분인거 같다....) 책에서는 인텔리제이와, JPA, JUnit테스트, Gradle, 소셜로그인, AWS 인프라로 무중단 배포까지를 망라해 책을 공부하는 독자들에게 지식을 전수해준다. 이 책이 끝판왕 개발 서적은 아니지만 더 깊은 내용을 공부하고 싶다면 다른 책을 찾아봐야한다. (인프런의 김영한-JPA수업 추천) 해당 책은 이미 서버 개발자(주니어 급)를 꿈꾸는 학생 또는 취준생이라면 한 번쯤은 봤거나, 접해볼 만한 책일 것이다. 내가 여기서 얻고자 하는..

스프링/백엔드 2022.01.30

클래스 메서드(static)와 인스턴스 메서드 (static은 무엇일까)

변수와 마찬가지로, 메서드 앞에 static이 붙어 있으면 클래스 메서드이고, 없으면 인스턴스 메서드이다. (클래스 영역에 선언된 변수를 멤버변수라 하고, 멤버변수 중 static이 붙은 것을 클래스 변수, 붙지 않은 것을 인스턴스 변수라 함. 인스턴스 변수와 static 변수 모두를 통칭하는 말이 멤버 변수!) 그럼 과연 static이 무엇일까? 무엇이길래 유무의 차이로 인해 정의가 바뀌는 것일까? static은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다. 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만, 클래스변수(static멤버변수)는 인스턴스에 관계없이 같은 값을 갖는다. 이와 같은 이유는 하나의 변수를 모든 같은 인스턴스가 공유하기 때문이다. static이 ..

Language/Java 2022.01.20

장독에 지식 채우기 (모를때마다 와서 추가)-(2022.01.17ver)

우연히 Java 관련 알고리즘 문제를 풀고 풀이 과정을 듣는 중 ArrayList라는 클래스가 눈에 보였다. (어... 이거 뭐였지?.. )하는 생각이 내 눈앞에 빠르게 지나갔는데... Array는 배열이였고.. List는 리스트? 그럼 ArrayList는? 뭐였지?... 그래서 풀이를 잠시 중단하고 ArrayList에 대해 짚고 넘어가고자 한다. 1. ArrayList ArrayList는 자바에서 기본적으로 많이 사용되는 클래스로 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나이다. 일반 배열과 동일하게 연속된 메모리 공간을 사용하는데, 배열과 마찬가지로 인덱스는 0부터 시작한다. 차이점은 배열은 크기가 고정이지만, ArrayList는 크기가 가변적으로 변한다. 내부적으로 저장이 가능한 메모..

Language/Java 2022.01.17