오늘날 백엔드 생태계에 큰 부분을 차지한다고 하는 Java그리고 백엔드 개발자를 꿈꾸는 내가이제부터 공부할 언어이기도 하다.근데 공부 할거면 적어도 뭔지는 대충이라도 알고 공부해야지.이제부터 한번 알아보자Java를 만들 때 필요한 규칙을 정의한 문서자바는 프로그래밍 '
코드는 결국 프로그래밍 '언어'다.문제점 해소니 세상을 편하게 하니 뭐니 해도,결국에는 그 과정 자체가 프로그래밍 '언어'의 소통으로 이루어진다는 거다.생각해보면 처음에는 프로그래밍 언어라는 말을 정말 프로그래밍 언어 그 자체로 받아들였다.즉, 아무 생각 없었다는 얘기
이 글은 자바에서 사용하는 모든 변수를 정리하고자 작성하는 글이 아니다.실무에서 주로 사용되는 변수만을 정리하는 글이니,변수에 대한 자세한 정보를 원하시는 분들에게는 적합하지 않다는 말씀을 먼저 드린다.int : 정수 기본 사용long : 정수가 20억이 넘는 경우 사
자바의 조건문에는 if와 switch가 있다.나는 if는 곧잘 사용하지만, switch는 웬만하면 사용하지 않는 것 같다.하지만 때때로 switch가 가독성을 더 높여주기 때문에사용하는 경우가 있다고 하니 바뀐 switch문에 대해 메모해보도록 하자.사실 변경 전 sw
java 반복문에는 for, while 그리고do-while문이 있다.생각해보면 for, while은 자주 사용하지만do-while은 존재 자체를 고려하지 않았던 것 같다.나중에 사용해야될 수도 있기에do-while문에 대해 메모해보자.while문과 유사하지만, 차이점
Java에는 여러 주제의 다양한 타입(형태)이 있다.예를 들어 숫자에 int, long, double, ...이 있는 것처럼.굳이 이런걸 왜 나누어 놨겠는가?용도에 맞게 사용하라는 뜻이다.지금은 성능이 좋아져서 상관이 없다지만,과거에는 작은 데이터는 크기가 작은 타입에
메서드를 선언할 때,파라미터의 종류가 달라지는 경우가 있다.예를 들어 계산기 프로그램이라고 하더라도,숫자를 파라미터로 받아 계산해주는 프로그램이 있을 수도 있고,문자열을 받아서 그 문자열을 합쳐주는 프로그램이 있을 것이다.숫자 타입에 문자열을 받을 수도 어떻게 하지?그
클래스를 생성합니다.객체를 생성합니다.방금까지 잘못쓰고 있었다.클래스가 객체고, 객체가 클래스 아니여?응 아니다.개념을 명확히 분리하고 가자.설계도는 무언가를 만들기 위한 전 단계이다.즉, 아직 만들어지지 않았다는 것.이 클래스는 User라는 클래스를 만들고어떻게 구성
자바 변수 데이터 타입에는기본형과 참조형이 있다.초장에 개념을 확 잡아두면헷갈리거나 다시 찾아볼 일이 없으니제대로 알아보자.데이터를 변수에 직접 넣어 사용한다.데이터를 그대로 계산에 사용 가능하다.소문자로 시작한다(int, long, double, boolean, ..
예외를 마주쳤을 때, 그 예외가 언제 발생하는 예외인지100%까진 아니더라도, 일부 이해하게 되면 같은 예외를 마주했을 때내가 보아야할 코드의 양이 달라지지 않을까.그래서 처음으로 알아볼 예외는 바로 NullPointerException.한 가지 차이를 메모해두기 위해
객체는 생성자를 필요로 한다.생성자가 필요한 이유는, 객체의 필드를 간편하게 초기화하기 위해서이다.생성자가 없다면 어떻게 될까?생성자의 필드를 일일이 초기화 해주어야 한다.지금은 필드가 한 개지만, 여러 필드가 있는 경우코드 row수가 증가하여 가독성을 해치는 주범이
접근 제어자란, 필드나 메서드, 생성자에 접근할 수 있는 사용자를 제어하겠다는 것이다.외부로 부터의 접근을 막아 버그를 방지하고 기대한 대로 기능이 작동할 수 있도록 유도한다.예를 들어, 내 이름을 바꿀 수 있는건 나로 한정하고, 다른 사람은 내 이름을 변경할 수 없도
객체를 생성했을 때,Method 영역Stack 영역Heap 영역각 세 영역에 어떤 변화가 있는지 알아보자.자, 그럼 new Clazz().클래스에 대한 정적 정보가 저장된다.클래스 구조 정보(Class or Interface)필드 정보(접근 제어자, 데이터 타입, 이름
Java에서 final 키워드는 말 그대로 마지막이라는 의미로 통용된다.뭐가 마지막이냐?값을 마지막으로 지정하다는 뜻이다.final 키워드는 변수에 사용 가능하며,final을 사용해서 선언한 변수는 최초 초기화 이후 변경이 불가능하다.몇 가지 규칙이 있으니 알아보자.f
Java에서 상속은 extends 키워드를 사용하여단순히 부모 클래스를 상속하는 것처럼 보이지만 내부에는 복잡한 사정이 있다.그 복잡한 사정을 알아보면, 상속을 더 깊이 이해할 수 있다.상속의 대표적인 규칙으로는자식 클래스의 생성자 첫 줄에 부모 클래스 생성자를 호출해
A는 B를 상속했다. 그렇다면 A는 A의 기능 + B의 기능을 이용할 수 있다. 그럼 난 앞으로 B는 무시하고, A만 사용하면 핵이득이다. 하지만, 상속 관계는 이렇게 원하는 대로 사용되지 않는다. 그리고 바로 이 점이 객체 지향의 꽃인 다형성을 제대로 이용하는
instanceof는 변수가 지정한 객체를 참조하는지 알 수 있는 키워드이다.다운캐스팅을 사용할 때에는 런타임 오류가 발생할 수 있기 때문에변수가 참조하는 인스턴스를 확인하고 객체를 생성하는 것이 중요하다.다운 캐스팅의 위험성은 다음을 참고하자.다운캐스팅의 위험성그렇다
자바에서 서로 같음을 비교하는 방법은 두 가지가 있다.바로 동일성과 동등성.왜 비교하는 방법이 통일되지 않고 두 가지로 나뉘었는가?필요하기 때문이다.왜 필요하냐고?바로 객체라는 존재 때문이다.객체는 객체의 위치를 가리키는 참조값을 변수에 저장한다.이 참조값은 객체가 가
객체의 데이터가 변경되는 것은때로는 매우 위험한 일이다.그래서 우리는 객체를 변경할 수 없도록불변 클래스를 설계하곤 한다.final 키워드를 이용하면 더 이상 수정이 불가능 하댔지.그럼 class에 final을 붙이면 되는건가?그렇지 않다.불변 클래스와 final 클래
자바에는 변수 타입으로 총 8가지 기본형을 제공한다.booleancharbyteintshortlongfloatdouble참조형은 클래스를 만들고, new 연산자를 사용하여 생성한다.간단하게 사용할 수 있는 기본형은 마냥 좋아보이지만,사용에는 치명적인 단점이 있다.기본형
데이터 입력 우리는 종종 객체 간에 데이터를 공유할 때, 상태를 입력해야 하는 경우가 있다. 예를 들어, 인증을 위해 휴대폰 기종과 번호를 입력해야 한다고 가정하자. 문제점 하지만 이 경우, 통신사 매개변수를 입력할 때, 사용자가 무조건 올바르게 입력할 수 있을
우리가 지겹도록 만들고 사용하는 클래스.이 클래스를 사용하는 방법에는 또 다른 종류가 있다.어떻게 사용할 수 있을까?사실 조금만 생각해보면 하나의 종류밖에 더 찾을 수 없다.바로 클래스 안에 클래스를 사용하는 중첩 클래스를 사용하는 것이다!하지만 중첩 클래스 안에는 여
우리는 다형성을 통해 부모 클래스 타입이 여러 자식 클래스를 참조할 수 있다는 것을 알고 있다.다형성부모 클래스 타입의 변수가 자식 클래스를 참조해도자식 클래스가 오버라이딩한 메서드가 우선 순위를 갖기 때문에 다형성을 활용할 수 있었지만,부모 클래스에는 여러 자식 클래
지난 시간에는 자바의 자료구조 컬렉션 중 배열리스트와 연결리스트에 대해 알아봤다.결론은 데이터 구조의 앞을 빈번하게 수정할 때를 제외하고 배열리스트를 사용하자! 였다.배열리스트와 연결리스트배열리스트는 index를 보유하여 순서가 있고 중복된 값을 저장할 수 있었다.하지
대학교 수업 때 자료 구조가 있었던 것이 생각난다.지금 보면 '자료 구조가 뭘 말하길래 자료 구조라는 이름이 붙었을까?' 라는 궁금증이 생기는데그 때는 관심도 없었던 걸 보면 나에게도 참 많은 변화가 일어나고 있는 것 같다. (ㅠㅠㅋㅋ)자료 구조란, 여러 데이터를 구조
지난 포스팅에는 세트에 대해 알아봤다.세트(Set)그런데 HashSet을 들여다보니 내부에 HashMap이라는 것을 사용하고 있었다.HashMap이 뭐길래 내부에서 사용되는걸까?Map은 Key와 Value로 구성된 Entry 모음의 자료 구조이다.순서를 보장하지 않으며
자바에서 지원하는 자료구조로배열리스트, 연결리스트, 세트와 해쉬맵에 대해 알아봤다.자바는 이 외에도 다른 자료 구조를 지원하는데Stack과 Queue, 그리고 Deque에 대해 알아보고 어떻게 사용하면 좋을지 들여다보자.스택은 후입선출(LIFO)의 성격을 가지는 자료
어지럽게 널브러진 데이터를 나열하는 것은 꽤나 중요하다.자바에서는 데이터 정렬을 위해 해야만 하는 작업이 있다.Comparable과 Comparator에 대해 알아보자.정렬을 위해서는 정렬할 데이터들과 정렬 기준이 필요하다.자바에서는 정렬 기준을 만들기 위해 Compa
자바는 인스턴스의 경우 GC(Garbage Collector)를 통해 사용하지 않는 객체를 정리한다. 하지만 외부 자원의 경우 자바는 자동으로 자원을 정리하지 않기 때문에, 필수적으로 직접 자원을 정리해야 한다. 자원을 정리하는 코드는 어떠한 상황에서도 필수적으로
HTTP를 통해 서버와 클라이언트가 데이터를 통신하기 위해애플리케이션 계층에서 Socket Library를 사용하여 효율적으로 운영체제 자원을 사용할 수 있다.자바 기반 Spring을 사용하는 경우 대부분의 기능이 적절하게 구현되어 있기 때문에,사실 직접적으로 Sock
Spring을 사용하면 마법같은 일을 아주 간단하게 수행할 수 있다.그 내부에는 복잡한 Java의 문법이 수행되는데, 알고 이해하면 더 빠르게 학습할 수 있다.이번엔 Spring Servlet의 핵심 기술인 리플렉션에 대해 알아보자.나는 나를 볼 수 없다. 나를 볼 수
지난 시간 마법 같은 일들을 쉽게 처리해주는 Spring의Servlet 핵심 기술 중 하나인 Reflection에 대해 알아봤다.Reflection객체 자신을 반사하여 자신의 구조를 살펴볼 수 있는 리플렉션 덕분에우리는 HTTP Request start-line의 re
자바 메서드에 ...이 등장하는 것을 본 적이 있을 것이다.별거 아닌 것 같아 보이면서도 처음에 접했을 때는 대체 이게 뭐지라는 생각을 했다.이번 포스팅에는 ...의 주인공, 가변 개수 인자에 대해 알아보자.가변 개수 인자란, 메서드 인자의 개수가 정해지지 않은 경우를
드디어 람다에 대해 알아봅시다.
field를 확인할 때 null이 반환될지 값이 반환될지 예상하기 어렵다.null인 경우라면 접근 시 NPE(NullPointerException)가 발생한다.예외를 발생하지 않기 위해 if문을 사용할 경우 가독성이 저하된다.Optional은 Java 8부터 등장한 존
인터페이스에 기능이 추가되어 메서드를 새로 생성하면인터페이스를 구현하는 모든 클래스에 컴파일 오류가 발생하면서해당 메서드를 구현해야 하는 까마득한 현실이 펼쳐진다.이 때 해당 메서드를 구현할 필요가 없는 클래스를 보며 잘못된 설계를 보기도 하고,어영부영 코드를 구현해
Stream이란 단어 그대로 흐르는 물처럼함수형 인터페이스를 매개변수로 받는 다양한 기능을메서드 체이닝 방식을 활용하여 연쇄적으로 기능을 적용할 수 있는 객체를 의미한다.각 메서드가 반환 값으로 데이터를 포함한 새로운 Stream 객체를 반환하기 때문에메서드 체이닝 방
병렬 스트림을 이해하기 위해서는 먼저 Fork Join Pattern을 이해해야 한다.작업을 단일 스레드로 처리하면 일꾼이 하나이기 때문에 작업 시간이 늘어난다.멀티 스레드로 작업을 나누어 실행하면 작업 시간을 단축할 수 있다.이 때, 스레드 풀을 사용하여 값을 반환하
프로그램에 대해 이야기할 때, 함수와 메서드 그리고 프로시저란 용어를 혼용하여 사용한다.소통하는 데에 큰 무리가 있던 적은 없을 수 있겠지만이 참에 세 용어의 의미를 확실히 정립해보자.함수는 프로그래밍 관점과 수학적 관점에서 그 의미를 나눌 수 있다.프로그래밍 관점에서
최근 자바를 공부하면서 난생 처음 보는 코드를 발견했다.바로 static 키워드로만 이루어진 블록이었다.나름 열심히 자바 공부를 하면서 객체나 메서드를 제외하고자바 강의에서 나오는 어지간한 키워드는 읽을 수 있다고 생각했는데 적지 않게 놀랐다.처음 발견하게 된 stat