
2025년 1월 9일 11일차 오후 수업부터 백엔드 과목이 시작되었습니다. 이번 포스팅에서는 백엔드 개발 환경 셋팅 및 JAVA의 특징에 대해 학습한 내용을 정리했습니다.
.java단계 까지는 JDK, .class 단계는 JRE 환경에서 동작, JVM을 통해 실행한다.

C:> java -version
java version "11.0.24" 2024-07-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.24+7-LTS-271)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.24+7-LTS-271, mixed mode)
개발 및 빌드 및 디버깅 툴.





같은 이름의 메서드를 매개 변수의 타입, 갯수, 순서를 다르게 해서 여러 개로 정의한다. (반환 타입은 포함되지 않음)
자바의 다형성(polymorphism) 개념의 구현.
System.out.println() => 인자값을 콘솔에 출력하고 개행문자를 처리
System.out.print() => 인자값을 콘솔에 출력
System.out.printf() => 형식 문자열을 이용해서 출력
변수 선언 시 변수가 가지는 데이터 타입을 지정
int a;
상수 이름과 메서드 이름 규칙이 동일하다.
변수는 선언된 시점에 생성되고, 생성된 변수는 자신이 선언된 열린 중괄호({)의 쌍인 닫힌 중괄호(})를 만나면 메모리에서 삭제.

값이 스택에 저장 ⇒ 크기가 고정.

실제 값은 힙에 저장되고, 스택에는 그 주소가 저장 ⇒ 크기가 가변

[스택메모리]
[힙메모리]
연산을 수행하는 과정에서 결과가 이미 확정됐을 때 나머지 연산 과정을 생략
// | 연산 => 모든 연산을 수행 후 결과를 비교
// java.lang.NullPointerException 예외가 발생
String s = null;
if (5 > 3 | s.equals("abc")) {
System.out.println("^^;;;");
}
// || 연산 => 결과가 확정되면 연산을 생략하므로 예외가 발생하지 않음
String s = null;
if (5 > 3 || s.equals("abc")) {
System.out.println("^^;;;");
}
new 키워드를 이용해서 객체를 생성하면 항상 새로운 객체를 생성.
문자열 리터럴로 생성하면 동일한 문자열을 포함하고 있는 객체가 있으면 그 객체를 공유.
선택 제어문 : if, switch
반복 제어문 : for, while, do-while
제어 키워드 : break, continue
객체(object)는 사용할 수 있는 실체를 의미 ⇐ 붕어빵
클래스(class)는 객체를 만들기 위한 설계도 ⇐ 붕어빵 틀
하나의 클래스를 이용해서 여러 개의 객체를 만들 수 있음
기억해두어야 할 예시 2가지
class A {
int m = 3;
void abc() {
System.out.println("A");
}
}
class B extends A {
int n = 4;
void bcd() {
System.out.println("B");
}
}
public class MyTest {
public static void main(String[] args) {
{
// B의 객체를 B 타입으로 선언
B b = new B();
System.out.println(b.m); // 3
System.out.println(b.n); // 4
b.abc(); // A
b.bcd(); // B
}
{
// B(자식)의 객체를 A(부모) 타입으로 선언했을 때
A a = new B();
System.out.println(a.m); // 3
System.out.println(a.n); // X
a.abc(); // A
a.bcd(); // X
}
}
}
class A {
void print() {
System.out.println("A 클래스");
}
}
class B extends A {
// 오버라이딩
@Override
void print() {
System.out.println("B 클래스");
}
}
public class MyTest {
public static void main(String[] args) {
A aa = new A();
aa.print(); // A 클래스
B bb = new B();
bb.print(); // B 클래스
A ab = new B();
ab.print(); // B 클래스
}
}
class A {
static int m = 3;
void print() {
System.out.println("A");
}
}
class B extends A {
static int m = 4;
void print() {
System.out.println("B");
}
}
public class MyTest {
public static void main(String[] args) {
// 클래스 이름을 이용해서 static 필드에 접근
System.out.println(A.m); // 3
System.out.println(B.m); // 4
A aa = new A();
B bb = new B();
A ab = new B();
// 인스턴스 변수를 이용해서 static 필드에 접근 => warning이 발생
// The static field A.m should be accessed in a static way
System.out.println(aa.m); // 3
System.out.println(bb.m); // 4
System.out.println(ab.m); // 3
System.out.println(((B)ab).m); // 4
}
}
한동안 react 어렵다가, 플젝하면서 익숙해졌다가, 쉬운 java 개념을 보게되니 머리가 맑아지는 느낌입니다. 빨리 spring 실습하고싶습니다.!!!