페이지 불러오는 중
설치 방식 Java 설치 패키지(.exe)를 실행하는 대신 binary 파일을 다운로드하여 원하는 경로에 압축 해제 후 관리.
JAVA_HOME: JDK가 설치된 경로를 시스템 변수로 지정.
Path (environment-path): %JAVA_HOME%\bin을 등록하여 어디서든 Java 명령어를 사용할 수 있게 함.
CLASSPATH: Java 클래스 라이브러리를 참조하기 위한 경로 설정.
설정 목적: 특정 버전에 종속되지 않고, 사용자가 원하는 Java 버전을 직접 등록하여 유연하게 사용하기 위함.
Eclipse IDE for Enterprise Java and Web Developers (Web Developer 기준) 설치..java 소스 코드를 컴퓨터(JVM)가 이해할 수 있는 .class (바이트코드) 파일로 변환하는 과정.public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}# 1. 컴파일 (HelloWorld.class 파일 생성)
javac HelloWorld.java
# 2. 실행 (결과 확인)
java -cp . HelloWorld각 변수 타입별 출력 예시입니다. System.out은 일반 출력, System.err은 에러 메시지 출력에 사용됩니다.
public class OutputExample {
public static void main(String[] args) {
// 변수 선언 및 초기화
String name = "김현진";
int age = 20;
double score = 95.5;
boolean isPassed = true;
// 표준 출력 (sout)
System.out.println("--- Standard Output ---");
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("점수: " + score);
System.out.println("합격여부: " + isPassed);
// 표준 에러 출력 (serr)
System.err.println("--- Error Output ---");
System.err.println("시스템 경고: 데이터 로그를 확인하세요.");
}
}문자열 내에서 특수한 기능을 수행하거나 따옴표 등을 표현할 때 사용하는 Escape 문자 예시입니다.
public class EscapeExample {
public static void main(String[] args) {
// \n: 줄바꿈, \t: 탭, \": 큰따옴표, \\: 백슬래시
System.out.println("1. 줄바꿈 예시:\n이 다음은 아랫줄에 출력됩니다.");
System.out.println("2. 탭 예시:\t탭만큼 띄워집니다.");
System.out.println("3. 따옴표 예시: \"Java는 정말 재밌습니다.\"");
System.out.println("4. 경로 예시: C:\\dev\\java_study");
// 혼합 사용
System.out.println("항목\t값\n이름\t\"김현진\"");
}
}Java 개발 시 가장 먼저 마주하는 선택은 데이터를 기본형으로 선언할 것인지, 아니면 객체 형태인 래퍼 클래스로 선언할 것인지에 대한 결정입니다.
import java.util.Optional;
public class PrimitiveWrapperComparison {
public static void main(String[] args) {
// 1. 기본형과 래퍼 클래스 선언
int primitiveAge = 30;
Integer wrapperAge = null; // 결측치 표현 가능
// 2. Nullable 처리 로직 (실무적 방어 코드)
// wrapperAge가 null일 경우 0을 기본값으로 할당하여 안전하게 연산 수행
int safeAge = (wrapperAge != null) ? wrapperAge : 0;
System.out.println("안전하게 변환된 나이 -> " + safeAge);
// 3. Optional을 활용한 null 처리
int optionalAge = Optional.ofNullable(wrapperAge).orElse(-1);
System.out.println("Optional로 처리된 나이 -> " + optionalAge);
// 4. 주의 -> 래퍼 클래스 간 값 비교 시 .equals() 사용 필수
Integer scoreA = 150;
Integer scoreB = 150;
// 주소 비교 (위험)
System.out.println("== 비교 결과 -> " + (scoreA == scoreB));
// 값 비교 (권장)
System.out.println("equals 비교 결과 -> " + scoreA.equals(scoreB));
}
}객체의 상태를 생성 후에 변경할 수 있는지 여부는 시스템의 안정성과 멀티스레드 환경에서의 데이터 정합성을 결정짓는 중요한 설계 포인트입니다.
// 불변 객체 설계를 위한 클래스 정의
final class UserAccount {
// 모든 필드를 private final로 선언하여 변경 가능성 차단
private final String accountId;
private final String ownerName;
private final long balance;
// 생성자를 private으로 설정하여 Builder를 통해서만 객체 생성 유도
private UserAccount(Builder builder) {
this.accountId = builder.accountId;
this.ownerName = builder.ownerName;
this.balance = builder.balance;
}
// Getter만 제공하고 Setter는 작성하지 않음
public String getAccountId() { return accountId; }
public String getOwnerName() { return ownerName; }
public long getBalance() { return balance; }
// 정적 내부 클래스로 Builder 구현
public static class Builder {
private String accountId;
private String ownerName;
private long balance;
public Builder accountId(String accountId) {
this.accountId = accountId;
return this;
}
public Builder ownerName(String ownerName) {
this.ownerName = ownerName;
return this;
}
public Builder balance(long balance) {
this.balance = balance;
return this;
}
public UserAccount build() {
return new UserAccount(this);
}
}
}
public class MutableImmutableTest {
public static void main(String[] args) {
// 1. Builder 패턴을 활용한 불변 객체 생성
UserAccount account = new UserAccount.Builder()
.accountId("ACC-12345")
.ownerName("김현진")
.balance(500000)
.build();
// 2. 데이터 조회
System.out.println("계좌 소유자 -> " + account.getOwnerName());
System.out.println("현재 잔액 -> " + account.getBalance());
// 3. 가변 객체의 대표적 예시: StringBuilder
StringBuilder mutableText = new StringBuilder("Initial Text");
mutableText.append(" -> Modified"); // 기존 객체 내부 상태 변경
System.out.println("가변 객체 출력 -> " + mutableText.toString());
}
}위 두 주제를 실무에 적용할 때 가장 중요하게 고려해야 할 포인트는 다음과 같습니다.
*msi : 마이크로소프트 인스톨러(Microsoft Installer)
*binary : 소스 코드를 컴퓨터가 즉시 실행할 수 있는 영문과 숫자의 집합(기계어)으로 변환한 파일 구조를 바이너리
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.