Java(이하 자바)는 1996년도에 발표된 썬 마이크로시스템즈에서 개발한 객체지향 프로그래밍 언어입니다. 자바의 가장 큰 특징은 JVM(Java Virtual Machine, 자바 가상 머신)이라는 것을 통해 자바 프로그램이 실행되기 때문에 OS에 구애받지 않고 어느
지난 포스트에서 자바를 처음 소개하면서 자바의 가장 큰 특징이라고 했던 JVM(Java Virtual Machine, 자바 가상 머신). 본격적으로 자바 프로그래밍을 시작하기 전에 자바 가상 머신에 대해서 좀 더 자세히 알고 넘어가려고 합니다.우리가 자바 언어를 프로그
이제부터는 자바로 프로그램을 작성하는 방법에 대해 알아보고 자바의 문법들에 대해서 알아보도록 하겠습니다.이번 포스트에서는 프로그래밍 언어의 유구한 전통 Hello world!를 출력하면서 자바 프로그래밍을 시작해보도록 하겠습니다.개발 환경은 인텔리제이, Java17을
변수는 데이터(값)를 저장하는 메모리 공간입니다. 데이터 자체를 바로 다룰수도 있지만 오류 방지나 가독성 등을 위해서는 변수에 담아서 다루는 것이 좋습니다.변수의 값은 바뀔수도 있지만 하나의 변수에는 하나의 데이터만을 저장할 수 있습니다.변수 선언은 데이터 타입과 변수
지난 포스트에서 변수의 개념, 변수 선언법, 변수 타입을 알아보았습니다. 이번 포스트에서는 변수 타입 중 기본형 8가지 boolean, byte, char, short, int, float, long, double에 대해서 알아보도록 하겠습니다.기본형 변수 타입에는 b
프로그래밍을 하다보면 꽤 자주 다른 타입 간에 데이터 연산을 수행해야하는 경우가 있습니다.(ex) int형 정수와 double형 실수의 연산 등) 그러나 데이터 연산은 같은 데이터 타입끼리만 수행할 수 있는데요. 이때 다른 타입 간에 연산을 위해서 하나의 데이터 타입으
연산자(operator)는 변수/리터럴 등과 같은 데이터를 처리하기 위해 미리 약속된 기호들입니다. 연산에 참여하는 변수나 리터럴 등을 피연산자(operand)라고 부릅니다.자바 연산자에는 크게 단항 연산자, 산술 연산자, 비교 연산자, 논리 연산자, 대입 연산자, 삼
가장 먼저 다룰 연산자는 높은 연산 우선순위를 가지고 있는 단항 연산자입니다. 단항 연산자는 피연산자가 하나인 연산자로 오른쪽에서 왼쪽으로 연산되는 특징을 갖고있습니다.증감 연산자는 피연산자의 값을 1 증가 또는 감소시키는 연산자입니다. 단항 연산자는 모두 피연산자의
산술 연산자는 피연산자를 두 개 갖는 연산자입니다.산술 연산자로 연산을 수행할 때 피연산자의 타입 크기가 4byte 미만이면, 4byte int형으로 자동 형변환을 수행한 뒤에 연산이 수행됩니다.사칙 연산자는 사칙연산에 사용되는 연산들로 더하기(+), 빼기(-), 곱하
비교 연산자는 두 피연산자를 비교해서 결과에 따라 ture/false를 반환하는 연산자입니다.피연산자가 두 개인 이항 연산자이기 때문에, 산술 연산자(https://velog.io/@bami/Java-%EC%82%B0%EC%88%A0-%EC%97%B0%EC%8
논리 연산자는 피연산자로 boolean형이나, boolean형이 결과로 나오는 조건식을 갖는 연산자입니다. 그리고 연산 결과로 true/false를 반환합니다.&&는 AND 연산, ||는 OR 연산을 수행하는 논리 연산자입니다.&&: AND연산, 두 피연산자가 모두 t
삼항 연산자 ?:는 말 그대로 피연산자가 3개인 연산자입니다.다음과 같은 구조를 가지고 있습니다. ? 왼쪽에는 조건식을 넣고 : 왼쪽에는 조건식이 true일 때 실행 될 코드를 오른쪽에는 false일 때 실행될 코드를 작성합니다. x == 1이 true이기 때문에 :의
대입 연산자는 변수에 값(리터럴)이나 연산 결과 등을 저장하는데 사용되는 연산자입니다. 사실 그동안 예제 코드 작성하면서 나왔던 =가 모두 대입 연산자입니다.대입 연산자는 지금까지 배웠던 몇몇 연산자들과 결합하여 oper=의 형태로 사용될 수 있습니다. 이렇게 사용하면
변수와 연산자에 대한 이야기를 하면서 캐스팅(형변환)이나 연산에서의 강제 형변환에 대한 이야기들이 몇 번 등장했었습니다. 그래서 다음 문법으로 넘어가기 전에 이러한 캐스팅들에 대해서 다시 한 번 간단하게 짚고 넘어가보려고 합니다. 자동 형변환(암시적 형변환)은 작은 데
조건문은 조건식에 따라 프로그램의 실행을 제어하는 구조입니다. 조건식과 중괄호 블록{}으로 구성되어 있는데, 조건식이 true를 만족하는 경우 중괄호 블록의 코드를 수행하는 구조를 가지고 있습니다. if문은 가장 일반적으로 사용되는 조건문입니다. if문은 다음과 같이
if~else 구문이 길어지면 가독성이 크게 나빠집니다. 게다가 if 구문은 조건식의 결과가 반드시 true나 false로 구분짓기 때문에 복잡한 결과를 걸러내고 싶어진다면 if 구문이 길어지거나 중첩되어서 가독성과 성능 저하가 발생합니다.따라서 이런 경우에는 swti
반복문은 특정 코드를 조건에 따라 반복하는 제어 구조입니다. for문은 반복문의 한 종류입니다.초기식을 가지고 조건식을 검사합니다. 이 결과가 true이면 반복문 블록{} 내부의 코드를 실행하고, 내부 실행이 완료되면 증감식을 수행합니다. 이렇게 반복하다가 조건식이 f
전에 다룬 기본형 변수(https://velog.io/@bami/Java-%EB%B3%80%EC%88%98-%ED%83%80%EC%9E%85-%EA%B8%B0%EB%B3%B8%ED%98%95참조형 변수는 객체의 주소를 저장하는 타입으로 데이터를 직접 저장하는
배열 배열(Array)은 같은 타입의 여러 데이터를 묶어서 하나의 묶음으로 제공하는 데이터 타입입니다. 변수에서 참조형의 대표 주자가 배열입니다. 배열은 다음과 같이 선언합니다. 이때 타입[] 이름은 배열에 접근하고 조작하기 위한 참조변수(이름)을 만드는 공간을 선
자바에서는 배열, 컬렉션을 좀 더 쉽게 처리하기 위해서 향상된 for문이라는 것을 제공하고 있습니다. 일반 for문에서는 카운터 변수 등을 사용해서 일일이 열거했어야 했는데요. 향상된 for문을 사용하면 가독성을 챙기면서 좀 더 편리하게 배열, 컬렉션 요소를 처리할 수
키보드로부터 콘솔에 데이터를 입력할 수 있는 Scanner 클래스에 대해 알아봅니다.
8가지 기본형에서 문자형 char를 배웠었지만, char는 오직 하나의 문자만을 저장하는 자료형이었습니다. 그리고 우리는 일반적으로 문자 하나보다는 문장, 즉 문자열을 훨씬 많이 사용합니다.자바에서는 이러한 문자열을 지원하기 위해 String이라는 문자열 타입을 운영하
열거형(Enumeration Type)은 여러 데이터들의 집합 타입입니다. 예를 들면 달력의 월, 일, 요일같은 정해져있는 데이터 등을 사용하고자 할 때 유용하게 사용할 수 있습니다.열거형은 클래스처럼 단독으로 파일을 하나 생성(.java)하고 작성하게 됩니다. 이때
객체지향 프로그래밍에 대한 글을 반드시 먼저 읽고 참조해주시길 바랍니다.요약클래스는 객체를 생성하기 위한 설계도. 속성과 기능으로 구성됨.인스턴스화: 클래스로부터 객체를 생성하는 과정인스턴스: 인스턴스화로 생성된 객체자바에서 클래스는 class명령을 사용해서 선언합니다
지난 포스트에서 메소드를 클래스 내부에서 정의되는 함수라고 간단하게 이야기했었는데요. 오늘은 이 메소드를 조금 더 자세하게 알아보려고 합니다.메소드(method)는 코드 블록으로 감싸진 명령 모음입니다. 이렇게말하면 어려워보이지만 간단하게 함수로, 어떤 데이터를 받아서
재귀호출(Recursive call)은 메소드의 내부에서 메소드가 자기 자신을 다시 호출하는 것을 말합니다.재귀호출을 이용하는 유명한 문제로는 팩토리얼(https://mathbang.net/546팩토리얼을 구하는 메소드인 getFactorial이 n이 1이 될
자바의 메소드 오버로딩에 대해 알아봅시다.
생성자(Constructor)는 인스턴스 생성 과정에서 호출되는 인스턴스 초기화 메소드입니다. 생성자는 인스턴스변수를 초기화하고, 인스턴스 생성시 필요한 작업들을 수행하는 역할을 맡고있습니다.생성자는 구조도 선언 방식도 메소드와 유사합니다. 오직 리턴값이 없다는 차이점
자바의 패키지에 대해 알아보고 import 구문에대해서도 알아봅니다.
final 키워드 그리고 상수의 개념과 상수를 선언하는 방법에 대해 알아봅니다.
상속(inheritance)는 재산 등을 친족에게 물려주는 행위를 말합니다. 쉽게 말해서 부모님이 자식에게 재산을 물려주는 것이죠.객체지향 프로그래밍(자바)에서 상속은 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 의미합니다. 상속을 이용하면 코드의 중복을 없앨
자바의 접근 제어자 public, protected, private에 대해 알아봅시다.
객체의 멤버 변수에 접근하는 getter, setter 메소드에 대해 알아봅니다.
메소드 재정의, 메소드 오버라이딩에 대해 알아봅니다.
자바의 객체 간 형변환에 대해 알아봅시다.
자바의 제어자에 대해 알아봅니다. 접근 제어자와 그 외 제어자들을 다룹니다.
자바의 instanceof 연산자에 대해 알아봅시다.
추상화(abstraction)는 어떤 것에 대해 세부적인 사항은 생략하고 주요한 특징만 뽑아서 모델링하는 것을 말합니다.예를 들어 자동차와 오토바이를 추상화한다면 바퀴가 있다, 엔진으로 구동된다 정도가 있겠죠?추상클래스는 인스턴스를 생성할 수 없는 클래스입니다. 추상메
Java 15에서 추가된 봉인된 클래스에 대해 알아봅시다.
자바의 인터페이스에 대해 알아봅니다. 이번 포스트에서는 인터페이스의 개념, 선언, 구현만 배웁니다.
인터페이스에서 사용할 수 있는 상수와 추상 메소드 외에 디폴트 메소드, 클래스 메소드 private 메소드에 대해 알아봅시다.
인터페이스의 타입 변환에 대해 알아봅시다.
클래스와 마찬가지로 인터페이스에서도 Java 15에서 추가된 sealed 키워드를 통해 봉인된 인터페이스 문법을 사용할 수 있습니다.봉인된 인터페이스 역시 무분별한 자식 인터페이스의 생성을 방지하고자 도입된 문법입니다.위와 같이 선언하면 A 인터페이스는 오직 B 인터페
자바에서 상속과 인터페이스를 이용해 다형성을 구현하는 방법에 대해 알아봅니다.
프로그래밍을 하다보면 숱하게 만나는 오류(error). 그동안 빨간 글씨가 쓰거나 정상 구동에 실패하면 '오류가 발생했네?'라고 했지만 오류가 무엇인지는 정확하게 알지는 못했습니다. 그래서 예외처리를 다루기 전에 오류에 대해 간단하게 알아보고 넘어가보도록 합시다.프로그
자바의 중첩 클래스에 대해 알아봅니다.
중첩 인터페이스에 대해 알아봅니다.
익명 객체를 알아봅시다.
java.base 모듈에 대해 알아봅니다.
모든 클래스의 최상위 클래스인 Object 클래스의 개념과 몇 가지 주요 메소드들을 알아봅시다.
java.lang 패키지의 System 클래스에 대해 알아봅니다.
가변성 문자열을 다루는 StringBuffer 클래스와 StringBuilder 클래스에 대해 알아봅시다.
Wrapper 클래스에 대해 알아봅니다. 추가적으로 Number 클래스도 짧게 다룹니다.
수학적 연산에 사용되는 Math 클래스에 대해 알아보고, 대표적인 메소드들을 살펴봅니다.
날짜/시간과 관계있는 클래스들에 대해 알아봅니다.
Format 클래스에 대해 알아보고, 자주 사용되는 자손 클래스인 DecimalFormat과 SimpleDateFormat 클래스에 대해 알아봅니다.
정규 표현식을 알아보고, 자바에서 정규 표현식을 검증하는 Pattern 클래스를 사용해봅니다.
리플렉션의 개념에 대해 알아보고 패키지 정보를 취득하는 방법에 대해 알아봅니다.
문자열을 분할하는 StringTokenizer 클래스에 대해 알아봅시다.
자바의 Annotation을 알아보고, 사용자 정의 어노테이션을 직접 만들어봅니다.
제네릭에 대해 알아봅니다.
자바의 컬렉션 프레임워크를 알아봅니다.
List 컬렉션의 대표 컬렉션 ArrayList와 LinkedList에 대해 알아봅시다.
배열과 컬렉션을 간결하게 처리할 수 있게 등장한 향상된 for문(for each)에 대해 알아봅니다.
컬렉션 프레임워크의 Set에 대해 알아보고, 구현 클래스인 HashSet과 TreeSet을 알아봅니다.
Map 컬렉션에 대해 알아보고 구현 클래스인 HashMap, TreeMap에 대해 알아봅니다.
Stack, Queue에 대해 알아봅시다.
동기화된 컬렉션 프레임워크를 생성하고 이용하는 방법에 대해서 알아봅니다.
수정 불가능한(immutable) 컬렉션을 만드는 방법에 대해 알아봅니다.
자바의 Iterator를 알아보고 iterator()의 사용법을 알아봅니다.
Comparable과 Comprator에 대해 알아봅니다.
프로세스와 쓰레드의 개념을 알아보고, 자바에서 쓰레드를 생성하는 두 가지 방법을 알아봅니다.
쓰레드의 상태에 대해 알아보고 상태를 조작하는 방법에 대해서 알아봅니다.
쓰레드의 start()와 run()메소드의 차이에 대해서 알아보고, 우선순위에 대한 개념도 알아봅니다.
쓰레드 그룹에 대해 알아보고, ThreadGroup의 사용법을 알아봅니다.
일반 쓰레드의 작업을 돕는 보조 쓰레드인 데몬 쓰레드에 대해 알아봅니다.
synchronized 키워드를 이용한 쓰레드 동기화에 대해 알아봅니다.
쓰레드의 과다 생성을 방지하는 쓰레드풀에 대해서 알아보고 사용해봅니다.
매개변수를 동적으로 받을 수 있는 가변인수에 대해 알아봅니다.
함수형 프로그래밍을 위한 람다식에 대해 알아봅니다.
자바의 스트림에 대해서 알아보고, 여러 리소스로부터 스트림을 취득하는 방법을 알아봅니다.
스트림 파이프라인에서 중간 처리를 하는 필터링, 매핑, 정렬 기능에 대해서 알아봅니다.
스트림의 요소를 반복처리하는 루핑에 대해 알아봅니다.
스트림에서 요소를 최종 처리하는 매핑과 집계에 대해 알아봅니다.
스트림 파이프라인의 최종 처리에서 요소를 수집하고 그룹핑하는 collect()에 대해서 알아봅니다.
스트림 요소 병렬 처리에 대해 알아봅니다.
입출력 스트림에 대해서 알아봅니다.
바이트 입출력 스트림에 대해서 알아봅니다.
문자 입출력 스트림에 대해서 알아봅니다.
보조 스트림에 대해 알아보고, 자주 사용되는 보조 스트림의 기능을 알아봅니다.
파일과 디렉토리 정보를 가지고 있는 File, File을 개선한 Files 클래스에 대해서 알아봅니다.
네트워크 입출력을 공부하기 위한 네트워크 기초를 다룹니다.
TCP 네트워킹 방법에 대해서 알아봅니다.
UDP 네트워킹에 대해 알아보고 간단한 서버-클라이언트를 프로그래밍합니다.
TCP, UDP 서버가 여러 클라이언트의 요청을 동시에 처리할 수 있도록 만들어봅니다.
자바 레코드에 대해 알아봅니다.
JDBC에 대해서 알아봅니다.
JDBC로 CRUD를 구현해봅니다.