[Java] 비전공자 / 노 베이스 입문자를 위한 자바 기본 문법 총정리 (Java 시리즈 2편)

자바(Java)전 세계에서 가장 널리 사용되는 프로그래밍 언어 중 하나 입니다. 특히 기업용 시스템, 안드로이드 앱, 백엔드 서버 등 거의 모든 분야에서 활용되죠. 이번 글에서는 비전공자, 노베이스 입문자, 무경력 개발자가 꼭 알아야 할 자바의 기본 문법과 핵심 개념을 예제와 함께 완전히 쉽게 정리했습니다.

Java 입문

변수(Variable) — 값을 저장하는 이름표

한줄 정의 : 값을 저장하는 이름 붙은 공간.
쉽게 말해 변수는 메모리의 ‘박스’에 이름표를 붙인 것과 같아요.

int a = 10;         // a라는 박스에 '정수(int)' 형태의 10 이라는 값을 저장
String s = "제로";  // s는 '문자열(String)' 형태의 "제로" 라는 값이 저장된 주소

기본형(Primitive)
Java에서는 변수를 만들 때, 어떤 종류의 데이터(자료형) 를 담을지 미리 정해줘야 합니다. 아래 표를 참고하세요.

자료형설명사용 예시메모리 크기
int정수형(소수점 없는 수)int age = 25;4byte
double실수형(소수점 있는 수)double pi = 3.14;8byte
boolean참/거짓 저장boolean isLogin = true;1byte
char한 글자 저장 (작은따옴표 ' ' 사용)char grade = 'A';2byte
long큰 정수형long distance = 10000000000L;8byte
float실수형(소수점), double보다 작음float temperature = 36.5f;4byte
byte아주 작은 정수(파일 크기, 네트워크 데이터 전송에 사용)byte b = 100;1byte
short작은 정수형short s = 32000;2byte

Tip) 숫자는 기본적으로 int, 소수점은 double 로 인식합니다. 그래서 float을 사용할 때는 꼭 f를 붙여야 합니다 (float a = 3.14f;).

참조형(Reference)
String, 배열, 객체 등 ‘주소값(참조)’을 저장하는 변수. 참조형 이라는 말은 위의 예시처럼 기본형이 아니라 실제 데이터는 메모리의 ‘어딘가’를 가리키고 있다는 뜻입니다.

예제 : ==.equals() 의 차이

public class StringTest {
    public static void main(String[] args) {
        String a = "Hello";
        String b = "Hello";
        String c = new String("Hello");

        System.out.println(a == b);       // true
        System.out.println(a == c);       // false
        System.out.println(a.equals(c));  // true
    }
}

💬 해설

코드의미결과이유
a == b메모리 주소 비교true문자열 리터럴은 같은 주소를 공유
a == c메모리 주소 비교falsenew 키워드는 새로운 주소 생성
a.equals(c)내용(문자열) 비교true문자열의 실제 내용 비교

Tip) 실무에서 문자열 비교 시 ==를 쓰면 주소가 다를 때 버그가 생길 수 있습니다. 따라서 항상 .equals() 를 사용해야 합니다.

정보처리기사 시험 및 실제 실무 포인트

  • String은 참조형이다. (기본형 아님)
  • == : 주소(참조값) 비교
  • .equals() : 문자열의 내용 비교
  • new String() 으로 만든 문자열은 새로운 메모리 공간을 차지한다.

Tip) String은 참조형 → == 은 주소 비교, .equals()는 내용 비교.
Tip) 기본형 변수의 초기값 문제는 정보처리기사 실기에서도 자주 등장합니다.


클래스(Class)와 객체(Object)

한줄 정의 : 클래스는 설계도, 객체는 설계도로 만든 실체.
쉽게 말해 붕어빵틀클래스, 붕어빵객체예요.

class Person {
    String name; // 속성
    void sayHello() { // 행동
        System.out.println("안녕, " + name);
    }
}

Person p = new Person();  // 객체 생성
p.name = "제로";
p.sayHello();  // 출력: 안녕, 제로

포인트

  • new로 만들어진 객체는 힙(Heap)에 저장됩니다.
  • 지역변수는 스택(Stack)에 저장되므로, 실행 순서를 이해하면 흐름이 보입니다.

상속(Inheritance)

한줄 정의 : 부모 클래스의 기능을 자식이 물려받는 것.
쉽게 말해 “공통 기능은 위로 올려서 재사용하는 것”.

class Animal {
    void eat() { System.out.println("먹는다"); }
}

class Dog extends Animal {
    void bark() { System.out.println("멍멍!"); }
}

Dog d = new Dog();
d.eat();  // 부모 기능 사용
d.bark(); // 자식 기능 사용

포인트

  • extends로 상속을 표현합니다.
  • 상속을 이해하면 “다형성(Polymorphism)” 개념으로 이어집니다.
  • 시험에서 “부모형 참조변수로 자식객체를 참조할 때 호출 결과”를 자주 묻습니다.

오버라이딩(Overriding) vs 오버로딩(Overloading)

구분오버라이딩오버로딩
의미부모의 메서드를 자식이 다시 정의같은 이름의 메서드를 여러 버전으로 정의
시점런타임(실행 중 결정)컴파일타임(코드 작성 시 결정)
키워드@Override없음
class Parent {
    void f() { System.out.println("P"); }
}

class Child extends Parent {
    @Override
    void f() { System.out.println("C"); } // 오버라이딩
    void f(int x) { System.out.println(x); } // 오버로딩
}

포인트

  • 오버라이딩은 “실행 시점의 객체 타입” 기준.
  • 오버로딩은 “매개변수 형태” 기준으로 메서드가 구분됩니다.

static — 모든 객체가 공유하는 변수

한줄 정의 : 클래스 단위로 공유되는 변수나 메서드.
쉽게 말해 “모든 인스턴스가 함께 쓰는 공용 게시판”.

class Counter {
    static int count = 0; // 모든 객체가 공유
    Counter() { count++; }
}

new Counter();
new Counter();

System.out.println(Counter.count); // 출력: 2

포인트

  • static은 프로그램 시작 시 한 번만 메모리에 올라갑니다.
  • 정보처리기사 실기에서는 “static 변수의 값이 몇 번 누적되느냐”를 자주 묻습니다.

[실전 예제] 정보처리기사 실기 기출형 문제

다음은 “상속 + 오버라이딩 + 필드 접근” 이 함께 나오는 대표적인 정보처리기사 실기의 Java 코드형 문제입니다.

public class Main {
    public static void main(String[] args) {
        Base a = new Derivate();
        Derivate b = new Derivate();
        System.out.print(a.getX() + a.x + b.getX() + b.x);
    }
}

class Base {
    int x = 3;
    int getX() { 
         return x * 2; 
    }
}

class Derivate extends Base {
    int x = 7;
    int getX() { 
        return x * 3; 
    }
}

[풀이]

1️⃣ a의 타입은 Base, 실제 객체는 Derivate.
2️⃣ a.getX()실제 객체 기준이므로 Derivate.getX() 호출 → 7 * 3 = 21
3️⃣ a.x변수는 컴파일 시점 기준(Base.x)3
4️⃣ b.getX()Derivate.getX() 7 * 3 = 21
5️⃣ b.x Derivate.x 7

👉 최종 출력값 : 52

핵심 요약 : 메서드 “실제 객체 타입” 기준으로 실행 (동적 바인딩) / 필드“참조 변수 타입” 기준으로 접근 (정적 바인딩)


[자주 나오는 연습 문제]

String s1 = "a"; String s2 = new String("a"); System.out.println(s1==s2);
결과 : false (==은 주소 비교)

int[] arr = new int[3]; System.out.println(arr[0]);
결과 : 0 (기본값)

static 변수는 언제 공유될까?
클래스가 로드될 때 한 번만 메모리에 생성됨.


참고 자료


이 글은 비전공자 개발자 제로의 성장 블로그 | 제로투데브 시리즈 중 ‘Java 시리즈 2편’입니다.
👉 1편이 궁금하다면? [Java] Java에 대해 알아보자.(Java 시리즈 1편)

다음 편 예고

다음 편에서는 [Java] 비전공자 / 노 베이스 입문자를 위한 자바 기본 활용 (Java 시리즈 3편) 으로 이어집니다. 많은 기대 부탁드립니다!

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤