자바에서는 객체를 문자화 시킬 때 toString()을 사용합니다. 대부분 사람들이 처음 toString()을 배울 때 단순한 출력문 함께 배우기 때문에 toString()을 인스턴스를 표현하는 @어쩌고의 문자 값 정도로 인지하지만 알고 보면 재미있는 녀석이 toString()입니다. toString()은 객체의 단순하게 보면 문자 값이지만, 객체의 입장에서 본다면 인스턴스화 된 자신을 문자로 표현할 수 있는 Object의 유산이에요. toString()을 잘 사용한다면 조금 더 재미있게 객체의 관점에서 객체를 바라볼 수 있어요. Object가 물려준 유산이 toString() 외에도 여러 가지가 있지만 오늘은 toString()에 대해서 이야기해보겠습니다. toString()은 어디에 사용될까? - 내..
의존성 주입(Dependency Injection)은 객체의 생성과 사용 관심사를 분리하는 프로그래밍 설계 방식입니다. 자바 같은 경우 추상화 도구(인터페이스, 추상 클래스)를 사용하면 손쉽게 의존성 주입하는 코드를 만들 수 있습니다. 오늘은 의존성 주입(DI)이라는 단어가 주는 부담을 덜어낼 수 있도록 이 글을 작성하게 되었습니다. 아직까지 의존성 주입이라는 개념이 대하기 어려우셨다면 뒤에서 이야기할 이야기를 통해 조금이라도 의존성 주입을 쉽게 이해하실 수 있으면 좋겠습니다. 아 그리고 의존성 역전(IOC)은 의존성 주입과 다른 개념이니 의존성 주입과 의존성 역전을 혼동하지 말아 주세요. 분명 둘은 다른 개념입니다. 의존성 정의부터 알아보자 의존성이라는 단어의 사전적인 정의는 "다른 것에 의지하여 생활..
자바 8 버전에서 새롭게 추가된 스트림(Stream) API는 자바가 함수형 프로그래밍을 지원한다는 사실을 잘 보여주는 패키지입니다. 여기서 다루지는 않지만 자바 8 버전부터 도입된 람다식(lambda expressions)을 통해 자바는 함수형 프로그래밍을 일부 지원하게 되었고 그 활용의 대표적인 예가 바로 스트림 API입니다. 공식 홈페이지의 말을 인용해 스트림(Stream) API에 대해 설명하면 Collection의 요소를 Stream을 통해 함수형 연산을 지원하는 패키지입니다. 아 그리고 여기서 한 가지 알아 둘 점은 지금 이야기하고 있는 스트림은 데이터 입출력(I/O)을 다룰 때 사용하는 그 스트림이 아니에요. 자바에서 사용하는 List, Map, Set과 같은 자료 구조의 집합인 컬렉션(Co..
정적 팩토리 메서드(static factory method)는 실무에서도 활용하기 쉬운 프로그래밍 기법입니다. 정확히는 GoF 디자인 패턴 중 팩토리 패턴에서 용어를 가져와 정의한 기법으로 "객체 생성 메서드"라고 정의할 수 있습니다. 프로그래밍을 처음 접한 사람은 조금은 어려울 수 있지만 간단하게라도 개념을 익히고 알아둔다면 프로그래밍을 하는데에 있어 도움이 되는 개념 중에 한 가지입니다. 정적 팩토리 메서드의 정의 정적 팩토리 메서드라는 용어가 생소하게 느껴질 수 있지만, 사실 그리 생소하지 않은 방법입니다. 자바에서 말하는 클래스의 인스턴스화, 즉 객체 생성을 흔히 사용하는 생성자가 아닌 정적(static) 메서드로 하는 것을 정적 팩토리 메서드라고 합니다. 글로만 설명하면 어려울 수 있으니 코드를..
이번 글에서는 자바를 이용해서 현재 디렉토리 경로를 확인하는 방법을 알아보도록 하겠습니다. 개발을 하다 보면 간혹 현재 작업하는 경로를 확인해야 하는 경우가 있습니다. 예를 들면 파일 업로드 폴더 위치를 확인하거나 환경설정 파일과 같은 특정한 파일들이 제 위치에 존재하는지 유무를 판별하기 위해서 말이죠. 때론 개발자의 작업 환경과 다른 서버 환경에서의 배포 이슈로 인해 자바가 인식하고 있는 현재 경로를 알아야 합니다. System.getProperty() 메서드를 사용한 현재 경로를 확인하는 방법 public class CheckDirectory { public static void main(String args[]) { String path = System.getProperty("user.dir"); ..
시작하기 자바에서는 모든 변수에 타입을 정의하고 있으며, 변수가 가지는 타입에 따라 담을 수 있는 값의 종류가 달라집니다. 바꿔 말하면 사용하려는 값의 종류에 따라 변수 타입을 결정합니다. 변수의 타입과 값의 상관관계를 이미지화해보면 아래의 그림과 같습니다. 변수에 저장하는 형과 값이 맞지 않는 경우 변수는 값을 가질 수 없고 값도 변수에게 전달 될 수 없습니다. 그렇기 때문에 변수 타입과 값은 서로에게 상호보완적인 요소로 사용됩니다. 위의 그림처럼 알맞은 형에 값을 전달해야지만 값을 저장 할 수 있습니다. 따라서 변수 타입은 값의 특성에 따라 정의되고 사용됩니다. 변수 타입은 크게 기본형(Primitive type)과 참조형(Reference type)으로 구분할 수 있습니다. 이번 글에서는 2가지 타..
값(데이터)을 사용하려면 변수를 선언(Declare) 하자 자바에서 변수를 사용하기 위해서는 변수를 선언해야 합니다. 변수를 선언하는 이유는 값을 저장하는 공간을 확보하겠다는 이야기입니다. 정확히는 컴퓨터가 가진 메모리를 사용하겠다고 미리 컴퓨터에게 말하는 것입니다. 컴퓨터에 메모리가 부족하다고 프로그램이 실행이 안 되는 이유는 이렇게도 설명이 가능합니다. 변수를 선언하는 것은 미리 자원을 확보하는 동시에 사용한다는 의미를 가지고 있기 때문에 변수를 선언하지 않는다면 프로그램은 값(데이터)을 담아둘 공간이 없어 값을 사용할 수 없습니다. 변수를 선언하는 방법은 다음과 같습니다. String message; 변수를 선언하는 방법은 변수 타입과 변수명을 함께 작성하는 것입니다. 위의 예제는 String(문자..
시작하기 Java라는 프로그래밍 언어를 배우게 되면 흔하게 접하는 내용 중 하나가 JVM입니다. JVM은 Java Virtual Machine의 줄임말로 번역하면 자바 가상 기계입니다. Java Virtual Machine(자바 가상 머신)의 역할을 조금 더 구체적으로 설명하면 Java로 만들어진 프로그램을 운영체제에 종속되지 않고 실행되게 해주는 가상 머신이라고 말 할 수 있습니다. 개인적으로는 JVM은 통역사라고 설명하는 게 의미적으로 가장 이해하기 좋다고 생각합니다. JVM이 하는 일을 더 자세히 알아보면 JVM은 정말 멋진 통역사입니다. 지난해에 이슈가 되었던 봉준호 감독님의 통역사처럼 말이죠. 이미지로 보는 JVM이 하는 일 by 통역 일반적인 프로그램이 동작하는 원리를 그려보았습니다. 그림과 ..
변수는 어떤 의미일까? 일반적으로 프로그래밍을 처음 접하게 되면 가장 먼저 접하게 되는 내용 중에 하나가 바로 변수입니다. 변수가 어떤 내용을 가지고 있기에 프로그래밍을 배우면 입문부터 배우게 되는 걸까요? 그 이유는 바로 프로그램의 근간이라고 말할 수 있는 데이터(값)를 프로그래밍에서는 변수라고 부르고 사용하기 때문입니다. 다르게 말하면 변수는 프로그래밍에서 없으면 안 되는 필수 요소입니다. 이해를 돕기 위해서 설명은 데이터와 변수가 같다고 이야기드렸지만 의미적으로 같게 사용하고 있을 뿐 완전히 똑같은 형태를 가지고 있지는 않습니다. 정확한 내용은 아래에서 설명할 변수의 선언과 할당을 보시면 됩니다. 그럼 현실과 빗대어 실제 프로그램에서 사용되는 변수의 역할을 설명해보겠습니다. 지금 쇼핑을 하러 가서 ..
Photo by Gayatri Malhotra on Unsplash 시작하기 구구단 만들기는 개발자로 취업하기 이전 Java 학원을 다닐 때 배웠던 문제입니다. 갑자기 지금 실력으로는 어떻게 코드를 만들 수 있을지 궁금해서 작성한 글이니 심심풀이로 봐주시면 좋겠습니다. 요구사항 2 ~ 9까지 곱셈하여 출력한다. 곱셈은 1 ~ 9까지 수를 제한한다. 샘플 코드 - 간단한 버전 public class MultiplicationTable { public static void main(String[] args) { int minNumber = 2; int maxNumber = 9; int startMultiplyValue = 1; int endMultiplyValue = 9; for (int number = m..
Java는 무엇인가? Java는 썬 마이크로 시스템즈(Sun Microsystems)에서 개발한 프로그래밍 언어로 1999년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어입니다. Java의 중요한 특징은 운영체제(Operating System) 즉 플랫폼(Platform)에 독립적이라는 것입니다. 그 이유는 Java가 "Write Once Run Anywhere"라는 목표를 가지고 만들어졌기 때문입니다. 그렇기 때문에 Java로 만들어진 프로그램은 JVM이 존재하는 운영체제라면 프로그램을 전혀 변경하지 않고도 실행이 가능합니다. 이러한 장점으로 인해 Java는 다양한 운영체제와 호환성을 가진 언어로써 컴퓨터의 발전과 함께 많은 사용자들을 확보할 수 있었습니다. 또한 기존의 프로그래밍(절차 지향) 언어..