곧 아기와 함께 비행기를 타고 여행을 갈 일이 생겨서, 기내반입이 가능한 유모차를 찾아보기 시작했어요. 아기와의 첫 여행이다 보니 이것저것 준비할 게 많아서 유모차도 정말 신중하게 골라야겠다고 생각했죠.
처음에는 여러 브랜드를 두루 살펴보면서무게, 접히는 방식, 안정성, 가격까지 하나씩 비교했어요. 처음부터 리안 그램플러스를 정해두고 본 건 아니고, 다양한 제품을 보면서 어떤 기능이 꼭 필요한지 생각하다 보니 자연스럽게 이 모델로 마음이 기울게 되더라고요.
등받이 눞혔을 때등받이 세웠을 때통풍창
리안 그램플러스를 선택한 이유
여행을 위해서였기 때문에 휴대성과 편리함이 제일 중요했어요. 리안 그램플러스는 원터치로 간단하게 접을 수 있고, 접은 상태에서도 스스로 안정적으로 서 있을 수 있다는 점이 정말 마음에 들었습니다. 짐이 많을 때 한 손으로 접어서 세워둘 수 있다는 게 큰 장점이에요.
그리고 비행기 기내반입이 가능하다는 것도 결정적인 이유였어요. 아직 비행기를 타본 적은 없지만, 공항에서 큰 짐으로 부치지 않아도 되고 비행기 안에서도 바로 사용할 수 있으니 정말 편리할 것 같아요.
또 하나 마음에 들었던 부분은 4바퀴 서스펜션이에요. 아직 본격적인 여행은 안 해봤지만 집 주변을 산책할 때도 울퉁불퉁한 길이 많잖아요. 서스펜션 덕분인지 흔들림이 확실히 덜해서 아기가 편안하게 타는 게 느껴졌습니다. 엄마 아빠가 밀 때도 힘이 덜 들어가서 만족스럽더라고요.
아기도 만족하는 등받이 각도
유모차를 고를 때 제가 중요하게 본 또 하나의 기능은 바로 등받이 조절이었어요. 리안 그램플러스는 등받이가 거의 180도까지 젖혀져서 아기를 눕혀 재우기 좋고, 또 거의 90도 가까이 세워지기 때문에 아기가 앉아서 주변을 구경하기에도 딱 좋아요.
아기가 눕기도 하고 앉기도 하는 편이라 외출할 때 상황에 맞게 조절할 수 있는 게 정말 편리했어요. 특히 등받이를 세워주면 아기가 신기한 듯 주변을 구경하며 좋아하는 모습을 보니 이 부분은 정말 만족도가 높았습니다.
직접 사용해본 느낌
처음 집에 도착해서 박스를 열어보니 생각보다 조립도 간단했고, 디자인도 깔끔하고 고급스러운 느낌이었어요. 무게가 가볍다고 해서 너무 약하지 않을까 걱정했는데 직접 보니 마감도 좋고 튼튼해서 안심이 됐습니다.
처음 접고 펴볼 때는 살짝 어색했는데, 몇 번 해보니 정말 원터치로 쉽게 접히고 펼쳐지더라고요. 접었을 때 스스로 서 있어서 한쪽 구석에 세워두면 되니 집안에서 보관하기도 너무 편했어요.
마무리 후기
아직 아기와 함께 비행기를 타보지는 않았지만, 집 근처 산책이나 짧은 외출만으로도 만족도가 높아요. 여행 갈 때는 더 빛을 발할 것 같아서 벌써부터 기대됩니다.
처음에는 어떤 유모차를 사야 할지 너무 고민됐지만, 결국 리안 그램플러스를 선택하길 정말 잘했다는 생각이 들어요. 휴대성과 안정성, 아기의 편안함까지 모두 만족시켜줘서 앞으로도 오래 잘 사용할 수 있을 것 같습니다.
Java 클래스의 필드는 객체의 상태(state)를 저장하고 관리하는 구성 요소입니다. 이 글에서는 자바 클래스 필드 선언 방법과 static, final, 접근제한자, 필드 초기화까지 실전 예제를 중심으로 완벽히 정리합니다. 클래스 필드는 클래스 내부에 정의되며, 프로그램 전반에서 데이터를 다루는 데 중요한 역할을 합니다. 이 문서를 통해 Java 필드 선언 문법을 완벽하게 익혀 보세요.
🔹 클래스 필드란?
클래스 필드는 클래스 내부에 선언되는 변수 선언(Variable Declaration)입니다. 다음 네 가지 요소를 포함할 수 있습니다:
접근 제한자 (e.g., private, public)
기타 수식어 (e.g., static, final, transient, volatile)
타입 (e.g., int, String, 사용자 정의 클래스)
이름 및 초기값 (선택적)
private int count = 0;
public static final String VERSION = "1.0";
✅ 기본 필드 선언 예제
public class Product {
public String name; // public 인스턴스 필드
private double price = 0.0; // 초기값을 가진 private 필드
static int totalCount = 0; // 클래스 전체에서 공유되는 static 필드
}
🔍 접근 제한자
필드는 다른 클래스에서의 접근을 제한하거나 허용할 수 있는 접근 제한자를 가질 수 있습니다:
public: 어디서든 접근 가능
protected: 같은 패키지 또는 하위 클래스에서 접근 가능
default(지정 안 함): 같은 패키지에서만 접근 가능
private: 해당 클래스 내에서만 접근 가능
class User {
public String id;
private String password;
}
⚙️ 필드 수식어 (Modifier)
🔸 static
클래스 전체에서 공유되는 정적 필드
인스턴스 없이 클래스 이름으로 접근 가능
🔸 final
한 번만 값을 할당할 수 있는 상수 필드
🔸 transient
직렬화(Serialization)에서 제외되는 필드
예: 객체를 직렬화하여 파일에 저장하거나 네트워크로 전송할 때 해당 필드는 제외됨
🔸 volatile
다중 스레드 환경에서 변수 일관성을 유지
JVM이 캐시하지 않고 항상 메인 메모리에서 읽고 씀
public class Config {
public static final String SYSTEM_NAME = "MySystem";
private transient String sessionToken;
private volatile boolean running;
}
📌 static vs 인스턴스 필드
구분
static 필드
인스턴스 필드
소속
클래스
객체(인스턴스)
메모리
클래스 로딩 시 할당
객체 생성 시 할당
접근 방식
클래스명 또는 객체
반드시 객체를 통해 접근
예시
Product.totalCount
product.price
public class Counter {
public static int global = 0;
public int local = 0;
}
🧪 필드 초기화 방법
선언 시 초기화
생성자에서 초기화
초기화 블록에서 초기화
public class User {
private String name = "Guest"; // 선언 시 초기화
public User(String name) {
this.name = name; // 생성자에서 초기화
}
// 인스턴스 초기화 블록
{
System.out.println("User 객체 초기화 중...");
}
}
⚠️ 주의 사항
🔸 필드 초기화 시 주의사항
static 필드는 클래스가 로딩될 때 초기화되므로, 초기화 순서에 따라 다른 static 필드 참조 시 예상치 못한 결과가 발생할 수 있습니다.
예: 아직 초기화되지 않은 static 필드를 다른 static 필드에서 참조하면 null 또는 초기값으로 처리될 수 있습니다.
🔸 필드 숨김(Hiding)
하위 클래스에서 상위 클래스와 같은 이름의 필드를 선언하면, 상위 클래스의 필드는 하위 클래스 내부에서 숨겨집니다.
이는 메서드 오버라이딩과는 다르게 작동하며, 의도하지 않은 동작을 유발할 수 있으므로 주의해야 합니다.
🔸 인터페이스의 필드 특성
인터페이스에 선언된 모든 필드는 암묵적으로 public static final입니다.
따라서 인터페이스에 필드를 정의할 때는 반드시 초기값을 제공해야 하며, 변경할 수 없습니다.
📚 마무리
Java에서 클래스 필드는 프로그램의 상태를 저장하는 핵심 요소입니다. 필드의 수식어, 접근 제한자, 초기화 방식 등을 잘 활용하면 유지보수가 쉬운 안정적인 객체를 설계할 수 있습니다.
Java에서 클래스(Class) 선언 방식은 객체지향 프로그래밍의 기반을 이루는 문법 요소 중 하나입니다. 클래스 선언은 단순히 이름과 중괄호로 본문을 구성하는 것 이상의 의미를 가지며, 다양한 수식어(modifier), 상속 관계, 제네릭 타입, 인터페이스 구현 등을 조합해 유연하고 확장 가능한 구조를 설계할 수 있습니다. 이러한 선언 구조를 명확히 이해하면, 프로그램 구조를 설계할 때 더 나은 모듈화, 캡슐화, 재사용성을 확보할 수 있습니다.
클래스 선언은 여러 구성 요소로 이루어져 있으며, 그 구조는 다음과 같은 부분으로 나뉩니다:
🔹 1. ClassModifiers (선택적)
클래스 선언 앞에는 다양한 수식어(modifier)를 사용할 수 있으며, 이들을 조합하여 클래스의 특성과 제한을 정의할 수 있습니다. 다음은 사용 가능한 주요 수식어와 그 의미입니다:
🔸 주요 수식어 목록
public: 어디서든 접근 가능
abstract: 추상 클래스. 인스턴스 생성 불가, 추상 메서드 포함 가능
final: 상속 불가능한 클래스
strictfp: 부동소수점 계산의 일관성을 JVM 간에 보장 (※ Java 24부터는 obsolete 처리됨. 새로운 코드에서는 사용 권장되지 않음)
sealed: 해당 클래스를 상속할 수 있는 하위 클래스를 제한 (Java 17 이상)
non-sealed: sealed 클래스의 하위 클래스 중 상속 제한을 해제 (Java 17 이상)
📌 수식어 관련 참고 사항
sealed 클래스를 선언하면 반드시 permits 절을 통해 상속을 허용할 하위 클래스를 명시해야 합니다.
sealed 클래스의 하위 클래스는 반드시 final, sealed, non-sealed 중 하나로 선언되어야 하며, 동일한 모듈 또는 패키지에 속해야 합니다.
public을 생략하면 해당 클래스는 'default 접근 제한자'가 적용되어 같은 패키지 내에서만 접근 가능합니다.
🔸 Modifier 조합 규칙
abstract와 final은 함께 사용할 수 없습니다. (추상 클래스는 확장을 전제로 하지만 final 클래스는 상속을 금지하기 때문입니다.)
같은 modifier를 중복해서 사용할 수 없습니다. 예: public public class A는 컴파일 오류 발생
✅ 클래스 선언 예시
public abstract class Shape {
abstract double area();
}
final class Constants {
public static final double PI = 3.1415;
}
strictfp class FloatCalculator {
double calc(float a, float b) {
return a * b / 3.14;
}
}
public strictfp class DataProcessor {
// 부동소수점 연산의 일관성 유지
}
🔹 2. class 키워드
자바에서 클래스를 정의할 때 반드시 사용하는 예약어로, 클래스 선언의 시작을 알립니다. 키워드는 소문자 class로 고정되어 있으며, 클래스 선언에서 가장 기본적인 구성 요소입니다.
🔹 3. ClassName (식별자)
클래스의 이름은 식별자로 지정되며, Java 명명 규칙에 따라 대문자로 시작하는 것이 관례입니다. 유니코드 문자도 사용할 수 있으며, 숫자로 시작해서는 안 됩니다.
🔹 4. TypeParameters (제네릭 타입 매개변수)
클래스가 제네릭 타입을 지원할 때 사용하는 매개변수입니다. 꺾쇠 괄호(< >)를 사용하며, 형식 매개변수를 명시하여 컴파일 타입 안정성과 유연한 재사용을 도와줍니다.
class Box<T> {
T value;
}
🔹 5. extends 절
클래스가 다른 클래스를 상속받을 때 사용하는 구문입니다. Java는 단일 상속만 허용하므로 하나의 클래스만 상속 가능합니다. 명시하지 않으면 Object 클래스를 자동으로 상속합니다.
class Dog extends Animal {
// Animal 클래스의 기능을 상속
}
🔹 6. implements 절
클래스가 하나 이상의 인터페이스를 구현할 때 사용하며, 쉼표로 구분하여 여러 인터페이스를 구현할 수 있습니다.
class Printer implements Printable, Loggable {
// 두 개의 인터페이스 구현
}
🔹 7. ClassBody
클래스 본문으로, 중괄호 {}로 감싸며 클래스의 실제 동작을 정의합니다. 필드, 메서드, 생성자, 초기화 블록, 중첩 클래스 등이 이 안에 위치합니다.
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
💡 클래스 선언 시 주의사항
클래스 선언 시 같은 이름을 동일한 스코프 안에서 중복 정의할 수 없습니다.
스코프(scope)는 클래스, 메서드, 블록 등 코드의 유효 범위를 말하며, 동일 스코프에서 클래스 이름이 충돌하면 컴파일 오류가 발생합니다.
클래스 선언은 정적(static) 또는 지역(local)으로 중첩될 수 있으며, 위치에 따라 접근성과 생명 주기가 달라집니다.
🧠 클래스 선언 요약
아래 표는 클래스 선언 구문의 각 요소를 요약한 것입니다:
요소설명
modifiers
클래스 특성을 정의 (public, abstract, final, sealed 등)
class
클래스 선언을 시작하는 예약어
ClassName
클래스 이름 (식별자)
TypeParameters
제네릭 클래스 정의 시 타입 매개변수
extends
부모 클래스 상속 (단일)
implements
인터페이스 구현 (다중)
ClassBody
클래스의 실제 구성 요소 정의 영역
🎯 마무리하며
이 글에서는 Java 클래스 선언 방식의 전체적인 구조와 각 구성 요소의 역할, 조합 규칙, 예외 사항 등을 설명했습니다. 클래스 선언에 대한 이해는 객체지향 설계의 시작점이자, 유지보수 가능한 코드의 기반이 됩니다.
Java 클래스는 다양한 수식어, 상속, 인터페이스 구현, 타입 매개변수 등을 통해 유연성과 확장성을 갖춘 구조를 정의할 수 있는 중요한 단위입니다.
Java 프로그래밍에서 흐름을 제어하는 문법은 매우 중요해요. 어떤 조건일 때 어떤 코드가 실행될지, 반복적으로 작업을 수행할지 결정하는 역할을 하죠. 이 글에서는 자바의 대표적인 조건문(if, switch)과 반복문(for, while, do-while)에 대해 차근차근 설명해드릴게요 😊
✅ 조건문 (Conditional Statements)
조건문은 특정 조건이 참인지 거짓인지에 따라 코드의 흐름을 제어할 수 있게 해줘요.
1️⃣ if문
if (조건식) {
// 조건이 참일 때 실행할 코드
} else {
// 조건이 거짓일 때 실행할 코드
}
🔹 else if로 여러 조건 분기
if (score >= 90) {
System.out.println("A학점");
} else if (score >= 80) {
System.out.println("B학점");
} else {
System.out.println("C학점 이하");
}
2️⃣ switch문
여러 조건 중에서 값 하나를 기준으로 분기 처리할 때 유용해요.
switch (변수) {
case 값1:
// 값1일 때 실행
break;
case 값2:
// 값2일 때 실행
break;
default:
// 일치하는 값이 없을 때 실행
}
💡 예제: 요일 출력
int day = 3;
switch (day) {
case 1:
System.out.println("월요일");
break;
case 2:
System.out.println("화요일");
break;
case 3:
System.out.println("수요일");
break;
default:
System.out.println("잘못된 입력");
}
for (int i = 0; i < 5; i++) {
System.out.println("i: " + i);
}
2️⃣ while문
조건을 먼저 검사하고, 조건이 참인 동안 반복 실행해요.
int i = 0;
while (i < 5) {
System.out.println("i: " + i);
i++;
}
3️⃣ do-while문
조건을 나중에 검사하므로, 무조건 한 번은 실행돼요.
int i = 0;
do {
System.out.println("i: " + i);
i++;
} while (i < 5);
🔄 for-each 문 (향상된 for문)
배열이나 컬렉션을 쉽게 순회할 때 사용돼요.
String[] names = {"Alice", "Bob", "Charlie"};
for (String name : names) {
System.out.println(name);
}
🛑 break와 continue
반복문 내에서 흐름을 제어하는 데 사용돼요.
🔹break
반복문을 완전히 종료시켜요.
for (int i = 0; i < 10; i++) {
if (i == 5) break;
System.out.println(i);
}
🔹continue
현재 반복을 건너뛰고 다음 반복으로 넘어가요.
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue;
System.out.println(i); // 홀수만 출력됨
}
🎯 마무리하며…
제어문과 반복문은 자바 프로그래밍의 근간을 이루는 핵심 요소예요. 다양한 조건에 따라 실행 흐름을 조정하고, 동일한 작업을 반복할 수 있도록 도와주죠. 특히 if, switch, for, while, do-while 같은 제어 구조는 대부분의 자바 프로그램에서 빠지지 않고 사용돼요.
각 문법의 구조와 사용 목적을 정확히 이해해두면, 이후 복잡한 프로그램에서도 유연하게 활용할 수 있어요
Java는 오랜 시간 동안 전 세계적으로 널리 사용되어 온 안정적인 객체지향 언어예요. 이 글에서는 Java의 기초를 탄탄하게 익히기 위해 꼭 알아야 할 문법 구조, 변수와 자료형, 그리고 연산자의 개념과 활용법까지 자세히 소개해드릴게요.
기초 문법은 단순한 시작이 아니라, 이후 모든 프로그래밍 실력을 키워나가는 데 중요한 기반이에요. 이 내용을 통해 Java에 대한 이해를 깊이 있게 다져보세요! 💡
✏️ Java의 기본 구조
Java는 클래스 기반 언어로, 모든 코드는 클래스 안에 작성돼야 해요.
public class Main {
public static void main(String[] args) {
// 실행 코드
System.out.println("Hello, Java!");
}
}
public class Main: Main이라는 이름의 클래스 선언
public static void main(String[] args): 자바 프로그램의 진입점 (메인 메서드)
System.out.println(...): 출력 명령어
public 클래스가 하나라도 존재한다면, Java 파일 이름은 반드시 그 클래스명과 같아야 해요. 또한 Java는 대소문자를 구분하므로 클래스 이름을 정확히 작성하는 것이 중요해요!
🔡 변수(Variable)란?
변수는 데이터를 저장할 수 있는 공간이에요. 변수를 선언하면 이름을 붙여 값을 저장하고, 필요할 때 꺼내서 쓸 수 있어요.
✅ 변수 선언 예시
int age = 25;
String name = "홍길동";
double height = 175.5;
int: 정수형
String: 문자열형 (객체 타입)
double: 실수형 (소수점)
자바는 정적 타입 언어이기 때문에, 변수를 선언할 때 **자료형(Data Type)**을 반드시 함께 지정해야 해요.
🧱 Java의 기본 자료형 (Primitive Types)
Java에는 총 8가지 기본 자료형이 있어요. 객체가 아닌 값 자체를 저장합니다.
자료형 설명 크기 예시
byte
정수형 (작음)
1 byte
-128 ~ 127
short
정수형
2 bytes
-32,768 ~ 32,767
int
정수형 (기본)
4 bytes
-2^31 ~ 2^31-1
long
정수형 (큰 수)
8 bytes
-2^63 ~ 2^63-1
float
실수형
4 bytes
3.14f
double
실수형 (기본)
8 bytes
3.14159
char
문자형
2 bytes
'A'
boolean
논리형
JVM에 따라 다름
true / false
※ 문자열은 String이라는 클래스로 처리되며, 기본형이 아닌 **참조형(reference type)**입니다.
🎯 상수(Constant)
한 번 저장한 값을 절대 바꾸지 않게 하려면 final 키워드를 사용해요.
final int MAX_USERS = 100;
관례적으로 대문자 + 언더바로 이름을 작성해요.
값 변경이 불가능하므로 보안성과 안정성이 높아져요.
➕ 연산자(Operator)
자바는 다양한 연산자를 제공해서 수학 계산부터 논리 처리까지 가능하게 해줘요.
📌 산술 연산자
자바에서 산술 연산자는 숫자 계산을 할 때 사용돼요.
+ : 덧셈 → 예: a + b
- : 뺄셈 → 예: a - b
* : 곱셈 → 예: a * b
/ : 나눗셈 → 예: a / b (정수 나눗셈 주의)
% : 나머지 → 예: a % b
🔗 대입 연산자
대입 연산자는 변수에 값을 저장하거나 기존 값에 연산 결과를 다시 저장할 때 사용해요.
= : 값을 대입 → x = 5
+= : 더한 후 대입 → x += 2 (x = x + 2)
-= : 뺀 후 대입 → x -= 2
*= : 곱한 후 대입 → x *= 3
/= : 나눈 후 대입 → x /= 2
%= : 나머지 대입 → x %= 3
자바에서는 비트 연산자와 시프트 연산자에도 복합 대입 연산자가 있어요:
&= : 비트 AND 후 대입 → a &= b (a = a & b)
|= : 비트 OR 후 대입 → a |= b (a = a | b)
^= : 비트 XOR 후 대입 → a ^= b (a = a ^ b)
<<= : 왼쪽 시프트 후 대입 → a <<= 2 (a = a << 2)
>>= : 오른쪽 시프트 후 대입 → a >>= 2 (a = a >> 2)
>>>= : 부호 없는 오른쪽 시프트 후 대입 → a >>>= 2 (a = a >>> 2)
이런 복합 연산자는 계산과 대입을 한 줄로 줄여 코드 가독성을 높여줄 수 있어요.
🧮 증감 연산자
증감 연산자는 변수의 값을 1씩 증가시키거나 감소시킬 때 사용해요. 전위(pre)와 후위(post) 위치에 따라 실행 순서가 달라집니다.
int x = 5;
int y = ++x; // 전위 증가: x를 먼저 1 증가시킨 후 y에 대입 → x=6, y=6
int a = 5;
int b = a++; // 후위 증가: a를 먼저 b에 대입한 후 1 증가 → a=6, b=5
++x / --x : 값을 먼저 변경하고 표현식에 사용 (전위)
x++ / x-- : 값을 먼저 사용하고 나중에 변경 (후위)
실행 순서 차이를 잘 이해하고 써야 버그를 줄일 수 있어요!
🔍 비교 연산자
비교 연산자는 두 값을 비교해서 true 또는 false를 반환해요.
== : 값이 같은지 비교 → a == b
!= : 값이 다른지 비교 → a != b
> : 왼쪽이 더 큰지 비교 → a > b
< : 왼쪽이 더 작은지 비교 → a < b
>= : 왼쪽이 크거나 같은지 → a >= b
<= : 왼쪽이 작거나 같은지 → a <= b
💡 논리 연산자
자바의 논리 연산자는 조건식에 true/false 값을 판단할 때 사용돼요.
&& (AND): 두 조건이 모두 참일 때만 참
true && false // false
|| (OR): 둘 중 하나라도 참이면 참
true || false // true
! (NOT): 논리값을 반전시킴
!true // false
🧠 비트 연산자
비트 연산자는 정수형 데이터를 2진수 비트 단위로 조작할 수 있는 연산자예요. 각 비트를 직접 제어할 수 있어, 메모리 최적화나 성능이 중요한 분야에서 자주 사용돼요.
비트 연산자는 다음과 같은 연산을 제공해요:
& (AND): 두 비트가 모두 1일 때 1
| (OR): 둘 중 하나라도 1이면 1
^ (XOR): 서로 다르면 1
~ (NOT): 비트 반전
<< (왼쪽 시프트): 비트를 왼쪽으로 이동 (값이 2배씩 증가)
>> (오른쪽 시프트): 비트를 오른쪽으로 이동 (2로 나눈 효과)
>>> (부호 없는 오른쪽 시프트): 왼쪽 빈 자리를 0으로 채움
int a = 5; // 0101
int b = 3; // 0011
System.out.println(a & b); // 1 (AND)
System.out.println(a | b); // 7 (OR)
System.out.println(a ^ b); // 6 (XOR)
System.out.println(~a); // -6 (NOT, 비트 반전)
System.out.println(a << 1); // 10 (왼쪽 시프트: 5 * 2)
System.out.println(a >> 1); // 2 (오른쪽 시프트: 5 / 2)
System.out.println(a >>> 1); // 2 (부호 없는 오른쪽 시프트)
☁️ 람다 연산자 (->)
람다 표현식에서 사용하는 ->는 Java 8부터 도입된 특별한 연산자예요. 값이 아닌 함수 형태의 로직을 전달할 수 있게 해주며, Java 공식 명세에서도 연산자로 분류돼요.
기본 구조와 예시는 아래에 정리해두었어요 👇 자바에는 기본 연산자 중에 ->는 없지만, **Java 8부터 도입된 람다 표현식(lambda expression)**에서 ->는 중요한 문법 요소로 사용돼요. 함수형 프로그래밍 스타일을 지원하기 위한 표현이에요.
Java 언어 명세(JLS)에서도 ->는 연산자로 분류되는데, 그 이유는 이 기호가 람다식이라는 표현식을 구성하고 평가해 값을 반환하는 기능을 수행하기 때문이에요. 즉, 입력과 결과를 연결해 하나의 연산처럼 작동하기 때문에 ->는 자바에서 **람다 연산자(lambda operator)**로 불려요.
✅ 기본 구조:
(매개변수) -> { 실행 코드 }
✅ 예제:
Runnable task = () -> System.out.println("Hello, Lambda!");
task.run();
Comparator<Integer> comp = (a, b) -> a - b;
->는 매개변수를 전달하고 실행할 코드를 간단하게 표현하는 방식이에요.
익명 함수처럼 동작하며, 주로 함수형 인터페이스와 함께 사용돼요.
💡 함수형 인터페이스: 추상 메서드가 하나만 선언된 인터페이스
❓ 삼항 연산자
삼항 연산자(ternary operator)는 if-else 문을 간단하게 한 줄로 표현할 수 있게 해주는 연산자예요.
형식은 다음과 같아요:
조건식 ? 참일 때 값 : 거짓일 때 값;
예를 들어:
int a = 10;
int b = 20;
int max = (a > b) ? a : b; // max는 20
조건식이 true면 ? 뒤의 첫 번째 값이 실행되고,
false면 : 뒤의 두 번째 값이 실행돼요.
복잡한 조건에도 중첩해서 사용할 수 있지만, 너무 많이 쓰면 가독성이 떨어지기 때문에 적절히 사용하는 것이 좋아요!
🔍 instanceof 연산자
instanceof는 자바에서 객체가 특정 클래스의 인스턴스인지 여부를 비교하는 비교 연산자(comparison operator)예요. 다른 비교 연산자처럼 true 또는 false를 반환하며, Java Language Specification에서도 연산자의 한 종류로 분류돼요.
이 연산자는 주로 형변환 전에 타입을 안전하게 확인할 때 사용돼요.
객체가 특정 클래스의 인스턴스인지 확인할 수 있어요. 형변환 전에 instanceof를 활용하면 오류 없이 안전하게 타입 확인을 할 수 있답니다!
처음 만든 GitHub 저장소를 어떻게 VS Code와 연결하고, 내 코드를 Github에 올릴 수 있는지 차근차근 안내해드릴게요 😊
Git 명령어가 어려운 분들을 위해 VS Code의 Git Graph 확장 프로그램을 사용해 클릭 몇 번으로 모든 과정을 쉽게 따라할 수 있도록 준비했답니다!
📌 Git과 원격 저장소란 무엇인가요?
Git은 우리가 코드를 수정하고 관리할 수 있게 도와주는 버전 관리 시스템이에요. 변경 이력을 기록해주고, 실수하더라도 이전 상태로 되돌릴 수 있는 아주 든든한 도구죠! 🛠️🕒
그리고 원격 저장소(Remote Repository)는 로컬 저장소가 아닌 다른 컴퓨터나 서버에 위치한 Git 저장소를 의미해요. 주로 GitHub, GitLab, Bitbucket 같은 클라우드 서비스를 많이 사용하지만, 내부 네트워크나 자체 서버에 있는 저장소도 원격 저장소로 사용할 수 있답니다. ☁️ 집, 회사, 카페 어디서든 내 코드를 불러올 수 있고, 팀원이랑 협업도 가능하답니다! 👯