package sec03.exam01;

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Java");
    }
}

📁 패키지 선언

package sec03.exam01;
  • Hello.java는 sec03.exam01 패키지에 포함된 클래스이므로 package sec03.exam01; 선언이 반드시 있어야 한다.

🔷 클래스 선언부

public class Hello {
  • 클래스 선언부 : public class Hello와 같은 형식으로 클래스의 정의를 시작하는 부분
  • public  : 공개 클래스임을 나타내는 접근 제어자
  • class : 클래스를 정의할 때 사용하는 키워드
  • Hello : 클래스 이름이며, 소스 파일명(Hello.java)과 반드시 일치해야 하고, 대소문자도 구분해야 한다.

🧱 클래스 구조

<접근제어자> class <클래스이름> {
    <필드 선언>;
    <메소드 선언>;
}
  • 클래스 : 필드와 메소드를 포함하는 블록
  • 필드(Field) : 클래스의 속성을 저장하는 변수
  • 메소드(Method) : 어떤 작업을 수행하는 실행문들을 모아 놓은 블록

🔐 접근 제어자 (Access Modifier)

  • 접근 제어자 : 정의된 클래스나 클래스 멤버에 접근 가능한 범위를 지정하는 키워드
  • 접근 또는 사용 : 변수 선언이나 상속 등을 위해 클래스 이름을 사용하는 것

사용 가능한 접근 제어자

접근 제어자 설명
(생략) 같은 패키지 내에서만 접근 가능
public 모든 클래스에서 접근 가능
protected 같은 패키지 또는 상속 관계에서 접근 가능
private 같은 클래스 내부에서만 접근 가능

소스파일이란?

  • 프로그래밍 언어로 작성된 텍스트 파일 (.java 확장자)
  • 컴퓨터는 이 파일을 바로 실행할 수 없음
  • ➡️ 컴파일 과정을 통해 기계어(0과 1)로 번역해야 사용 가능

 

자바 개발 과정

1단계. 소스파일 생성

  • 확장자가 .java인 파일
  • 자바 언어로 코드 작성
  • 예: HelloWorld.java

소스파일 = 사람이 이해할 수 있는 코드

 

 

✅ 2단계. 컴파일 (javac 명령어)

  • javac 파일명.java 명령어 실행
  • ➡️ .class 확장자의 바이트 코드 파일 생성

컴파일 = 소스파일 ➡ 바이트 코드로 번역
⚠️ 바이트 코드는 운영체제가 바로 실행할 수 없음

 

 

✅ 3단계. 실행 (java 명령어)

  • java 파일명 명령어 실행 (확장자 제외)
  • 바이트 코드가 **JVM(Java Virtual Machine)**에 의해 기계어로 번역되어 실행

 

💡 바이트 코드란?

  • 완전한 기계어가 아니어서 바로 실행할 수 없는 파일
  • .class 확장자의 파일
  • ➡️ JVM이 운영체제에 맞게 기계어로 재번역 후 실행
JVM이 있기 때문에 자바는
"윈도우에서 만든 프로그램을 리눅스에서 실행 가능!"

 

 

🛠️ 자바 개발 도구

Editor I) 메모장

다음과 같이 메모장에 코드를 입력 후 파일 형식은 모든 파일로 하고 확장자를 .java로 하여 소스 파일을 저장한다.

로고키 + R → cmd ⇒ 소스파일이 저장된 폴더로 이동하여 javac 명령어를 이용하여 컴파일,

java 명령어를 이용하여 실행한다.

javac : 컴파일, 사람이 이해할 수 있는 언어로 작성된 코드를 기계가 이해할 수 있는 기계어로 바꿔주는 명령어

ㄴjavac 명령어를 실행하면 .class 파일이 생성되는데

이렇게 사람은 이해할 수 없지만 기계는 이해하는 바이트 코드로 변한 것을 볼 수 있다.

바이트 코드 파일은 완전한 기계어가 아니므로 바로 실행할 수 있는 파일이 아니다.

바이트 코드 파일을 완전한 기계어로 번역해서 실행하려면 java 명령어를 사용해야 한다.

Editor II) Eclipse

📌 설치 가이드
https://deevchoe.tistory.com/24

 

 

📌 프로젝트 생성

  • Create module-info.java file 체크 해제

📌 소스파일 작성

    • 클래스 이름: 첫 글자는 대문자
    • public static void main(String[] args)
      • 자바 소스 컴파일 후 실행하려면 체크
      • java 명령어로 바이트 코드 파일을 실행하면 제일 먼저 main() 메소드를 찾아 블록 내부를 실행한다.
      • 그래서 main() 메소드를 프로그램 실행 진입점이라고 부르기도 한다.
 
 

 

메소드 : 어떤 일을 처리하는 실행문들을 모아놓은 블록

 


** 자동으로 컴파일 된 바이트 코드 파일이 {자바 프로젝트 폴더 경로}\bin 폴더에 {소스파일이름}.class로 생성됨


 

📌 실행 방법 (3가지)

첫번째! Run 아이콘을 클릭하여 실행

두번째! 마우스 우클릭 > Run As > Java Application

세번째! Ctrl + F11

세가지 방법 중 하나로 실행시킨 후 성공적으로 실행되면 아래와 같이 Console 뷰에 결과가 출력된다.

번외) Java perspective

 

  • Eclipse에서 자바 개발에 최적화된 뷰
  • 패키지 탐색기, 콘솔, 편집기 등 구성

 

 
 
 
 

 

설치 : https://code.visualstudio.com/

[패키지 설치]

단축키 : Ctrl + Shift + X

⇾ korea language

⇾ live server : 코드에 변경사항이 발생하면 자동으로 페이지를 새로고침

⇾ eslint : 문법 검사를 해준다.

⇾ Prettier-code formatter : 코드 자동 정렬 지원

 

⇒ 설치 후 할 일 ...

1. Ctrl + ,

2. format on save 검색

3. EditorL Format On Save 체크!

⇾ Error Lens : 친절한 오류 표기

이게
이렇게

 

[단축키]

한 줄 복사 : Shift + Alt + ↑ / ↓

한 줄 삭제 : Ctrl + Shift + K

한 줄 이동 : Alt + ↑ / ↓

 

 
 
 
 
 
 

 

 

 

통합 개발 환경(IDE : Intergrated Development Environment)

- 프로젝트 생성, 자동 코드 완성, 디버깅 등과 같이 개발에 필요한 여러 가지 기능을 통합적으로 제공해주는 툴

 


 

🔧 Eclipse 설치

- 이클립스는 자바 언어로 개발된 툴이기 때문에 실행하기 위해서는 JDK가 필요하다.

JDK 설치하러 Go! https://deevchoe.tistory.com/21

- 이클립스는 파일 다운로드 후 압축 해제만 하면 설치가 끝난다.

https://www.eclipse.org/downloads/

 

[Eclipse IDE for Java Developers]도 좋은 선택이지만,

 

웹 애플리케이션 개발까지 고려하고 있다면

[Eclipse IDE for Enterprise Java and Web Developers]를 선택하는 것이 좋다.

 

 

⚙️ Eclipse 설정

- workspace(작업영역) 바꾸는 방법

File > Switch Workspace

 

- 아래 기본 설정은 workspace(작업영역) 바꿀때만 한번씩 해주면 된다.

Window → Preferences

 
 

 

✔️ 추가 설정 꿀팁

- 글자 크기 변경 (Window → Preferences)

 

⚠️ Eclipse 주의 셋팅!

1) 실행 시..

[Use this as the default and do not ask again]을 체크하면

이클립스를 재시작할 때 [Eclipse IDE Launcher] 대화상자가 실행되지 않는다.

 

하지만! 이클립스를 실행할 때 워크스페이스 변경이 필요한 경우도 있기 때문에 체크하지 않는 것이 좋다.

 

2) 프로젝트 생성 시..

[Module] → [Create module-info.java file] 체크 해제

3) 클래스 생성 시..

Name : 자바 소스 파일의 이름이자, 작성할 클래스 이름 / 항상 첫글자를 대문자로 작성할 것

main() 메소드를 자동으로 추가하기 위해

[public static void main(String[] args)] 체크

ㄴ 자바 소스 프로그램을 컴파일 후 실행하려면 반드시 추가해야 함

 

🛠️ Eclipse 기타 사용법

1. project 삭제 / 임포트

1) 삭제

[Delete project contents on disk (cannot be undone)]체크 후 지워야 물리적으로 깨끗하게 지워진다.

2) 임포트

 

2. 파일명 변경

 

3. 메뉴 커스텀

 

4. 콘솔창과 분리.

1) NOooo~~~~

2) Window → Perspective → Reset Perspective

3) 분리 완료

5. 기타 사용 꿀팁

1) 주석

// : 라인 주석

/* ... */ : 범위 주석

** 복잡한 코드일수록 주석을 달면 전체 코드를 이해하기 쉽고 수정이 용이하다.

** 주석을 많이 작성한다고 해서 바이트 코드 파일의 크기가 커지는 것은 아니므로

가급적이면 설명이 필요한 코드에 주석을 달아주는 것이 좋다.

2) 자동완성

ma + Ctrl + Spacebar + Enter : 메인 메소드 생성

public static void main(String[] args) {

}

syso + Ctrl + Spacebar + Enter : System.out.println();

3) Math.randome() 메소드를 활용한 난수 출력

해당 메소드는 0.0과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴한다.

사용 예) 주사위 번호 하나 뽑기

int num = (int) (Math.random() * 6) + 1;
// 1, 2, 3 ... 6 사이의 정수 출력

4) 단축키

Ctrl + F11 : 실행

Ctrl + 방향키 : 라인 이동

Ctrl + Alt + 방향키 : 라인 복사

Ctrl + D : 라인 삭제

Ctrl + Shift + F : 줄맞춤

프로그래밍이란 뭘까~

0과 1밖에 알지 못하는 기계가 실행할 수 있도록 정확하고 상세하게 요구사항을 설명하는 작업.

 

프로그래밍 언어

사람이 사용하는 언어는 컴퓨터 입장에서 이해할 수 없는 언어의 집합.

기계어는 컴퓨터가 쉽게 이해할 수 있는 0과 1로 이루어진 이진 코드로 사람 입장에서는 이해할 수 없는 언어.

사람과 컴퓨터가 대화하기 위해 사람의 언어와 기계어의 다리 역할을 하는 것.

출처 : 모던 자바 스크립트 Deep Dive

문제 해결 능력을 통해 만들어낸 해결 방안은 프로그래밍 언어의 문법을 사용해 표현한다.

즉, 작성된 코드는 해결 방안의 구체적 구현물이다.

대부분의 프로그래밍 언어는

"변수와 값"

"키워드"

"연산자"

"표현식과 문"

"조건문" 과 "반복문"

에 의한 흐름제어, 함수 그리고 자료구조인 객체 배열 등과 같은 문법을 제공한다.

프로그래밍 언어가 제공하는 문법을 적절히 사용하여

변수를 통해 값을 저장하고 참조하며

연산자로 값을 연산, 평가하고

조건문과 반복문에 의한 흐름제어로 코드의 실행 순서를 제어하고

함수로 재사용 가능한 문의 집합을 만들며

객체, 배열 등으로 자료를 구조화 한다.

 

자바의 특징

  • 모든 운영체제에서 실행 가능
  • 객체 지향 프로그래밍

: 객체(부품)를 만들고, 이 객체들을 서로 연결해서 더 큰 프로그램을 완성하는 기법

  • 메모리 자동 관리
  • 무료 라이브러리 풍부

: 프로그램 개발 기간 단축

 

자바 개발 도구(JDK : Java Development Kit)

1) 설치

https://github.com/ojdkbuild/ojdkbuild

 

 

 

2) 환경변수(운영체제가 실행하는 데 필요한 정보를 제공해주는 변수) 설정

- JAVA_HOME : JDK가 설치된 폴더

- 어떤 프로그램이 설치된 JDK의 위치를 찾을 때 JAVA_HOME 환경 변수를 이용한다.

 

- bin : 자바 소스 파일을 컴파일해주는 javac 명령어와 컴파일된 파일을 실행해주는 java 명령어 등

다양한 명령어들이 포함되어있는 폴더

 

 

3) 설치 확인

- 로고키 + R → cmd ⇒ 'java -version'을 입력하여 버전이 출력된다면 환경 변수가 제대로 설정되었다는 의미

- 에러가 난다면 환경 변수 설정 중 잘못된 건 없는지 확인

 

## JAVA 플랫폼의 3대 구성 요소

1. JVM (Java Virtual Machine)

: JAVA와 OS 사이에서 중개자 역할을 수행

: 컴파일 된 코드가 서로 다른 OS라 할지라도 실행되도록 설계 된 것

: 자바 소스코드(.java)를 만들어서 빌드하면 컴파일 작업을 거쳐 자바 바이트 코드(.class)로 자동 변환 및 생성

➜ JVM이 하는 일

** 바이너리 코드(.class) 읽기

** 바이너리 코드 검증

** 바이너리 코드 실행

** 실행 환경(Runtime Environment)의 규격 제공(필요한 라이브러리 및 기타 파일)

2. JRE (Java Runtime Environment)

: 자바 실행 환경

: 자바 프로그램을 실행 시킬 때 반드시 필요한 라이브러리 및 기타 필수 파일을 가지고 있다.

: Java 언어를 이용하여 개발한 코드를 실행 시키기 위해선 JRE가 필요

** JRE는 그 자체로 특별한 기능을 한다기보다는 JVM이 원활하게 잘 작동할 수 있도록 환경을 맞춰주는 역할을 합니다.

3. JDK (Java Development Kit)

: JRE + 개발을 위해 필요한 도구들을 포함

: Java 언어를 이용하여 개발 및 실행하기 위해서는 JDK가 필요

👍 컴퓨터에서 Java 프로그램을 실행하는데만 포커스를 둔다면, JRE만 설치하면 됩니다.

Java를 이용하여 프로그래밍까지 할 계획이라면 JDK를 설치하면 됩니다.

" JDK는 JRE를 포함하고 있고, JRE는 JVM을 포함하고 있습니다.

따라서, JDK를 설치하면 JRE, JVM이 자동으로 설치가 됩니다. "

 

 

알고가기!!

1. 클래스(Class)

: Object를 만들어내기 위한 설계도 / 틀

: Object를 코드로 구현한 것

: Object를 생성하는데 사용

package java_project;

/**
 * 멤버 변수 : 객체가 가지는 속성을 변수로 표현한 것
 */

public class Student {
	public int studentID;
	public String studentName;
	public String address;

	/**
	 * 메서드(method) : 객체의 기능을 구현한 것
	 * 
	 * 위에서 생성한 학생들의 정보를 통해 기능을 구현하기 위해서 학생 정보를 출력하는 메서드를 생성 학생들의 정보를 출력하기 위해
	 * showStudentInfo라는 메서드를 생성 메서드 내부에 학생 정보를 출력하는 코드를 작성
	 */

	public void showStudentInfo() {   //  학생 정보 출력
		System.out.println("학번 : " + studentID);
		System.out.println("이름 : " + studentName);
		System.out.println("주소 : " + address);

	}
}

 

 

2. 객체(Object)

: 구체적 · 추상적 데이터의 단위

: 실제로 존재 하는 것

: 용도는 Object가 가지고 있는 기능과 속성에 따라 다름

3. 인스턴스(Instance)

: 클래스를 new 명령문으로 메모리에 생성한 객체

: 각각의 독립적인 객체

** 클래스로부터 객체를 만드는 과정 ⇢ 클래스의 인스턴스화

** 클래스로부터 만들어진 객체 ⇢ 클래스의 인스턴스

** Instance = Object

👍 프로그래밍으로 표현하려는 실체는 객체입니다.

      이러한 실체를 추상화한 설계도는 클래스이며, 클래스를 인스턴스화하여 객체가 생성되는 것입니다.

/* 클래스 */
public class Animal {
  ...
}
/* 객체와 인스턴스 */
public class Main {
  public static void main(String[] args) {
    Animal cat, dog; // '객체'

    // 인스턴스화
    cat = new Animal(); // cat은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
    dog = new Animal(); // dog은 Animal 클래스의 '인스턴스'(객체를 메모리에 할당)
  }
}

 

 

 

## 기타 용어

1. 플랫폼

: 프로그램이 실행되는 환경

2. API

: 프로그램 작성을 위한 도구의 모음

[Ex] 함수, 라이브러리 등

3. 라이브러리

: 소프트웨어를 개발할 때 유용하게 사용할 수 있는 변수, 함수 등의 모음

4. 컴파일

: 인간이 사용하는 언어로 작성된 소스 파일을 컴퓨터가 알아들을 수 있는 기계어 코드로 변환해주는 작업

LAMP 스택

웹 애플리케이션을 개발하고 배포하는데 사용되는 인기 있는 오픈 소스 소프트웨어 스택

  • Linux : 운영체제
  • Apache : 웹 서버
  • MySQL : 데이터베이스 서버
  • PHP : 프로그래밍 언어

 

[문제링크]

package org.pack.feb_3.Lv1_공원산책;

import java.util.HashMap;
import java.util.Map;

public class chooi {
    public int[] solution(String[] park, String[] routes) {
        // 시작 위치 찾기
        int startX = 0, startY = 0;
        for(int i = 0; i < park.length; i++) {
            for(int j = 0; j < park[i].length(); j++) {
                if(park[i].charAt(j) == 'S') {
                    startX = i;
                    startY = j;
                }
            }
        }

        // 방향 이동 정의
        Map<String, int[]> directions = new HashMap<>();
        directions.put("N", new int[]{-1, 0});
        directions.put("S", new int[]{1, 0});
        directions.put("W", new int[]{0, -1});
        directions.put("E", new int[]{0, 1});

        // 명령 수행
        for(String route : routes) {
            String[] split = route.split(" ");
            String dir = split[0];      // 방향
            int steps = Integer.parseInt(split[1]);     // 이동거리
            int[] move = directions.get(dir);       // 방향 이동 값 가져오기

            int newX = startX, newY = startY;
            boolean canMove = true;

            for(int i = 1; i <= steps; i++) {
                int nextX = startX + move[0] * i;
                int nextY = startY + move[1] * i;

                // 공원을 벗어나면 중단
                if(nextX < 0 || nextX >= park.length || nextY < 0 || nextY >= park[0].length()) {
                    canMove = false;
                    break;
                }

                // 장애물(X)이 있으면 중단
                if(park[nextX].charAt(nextY) == 'X') {
                    canMove = false;
                    break;
                }

                // 이동 가능하면 최종 위치 저장
                newX = nextX;
                newY = nextY;
            }

            // 이동이 가능하다면 위치 업데이트
            if(canMove) {
                startX = newX;
                startY = newY;
            }
        }
        return new int[]{startX, startY};
    }
}

'Java기반FullStack > CoTe' 카테고리의 다른 글

코딩 테스트 하기 전 필수 개념?  (1) 2025.03.03

코딩테스트를 준비하는 과정에서 배열(Array), 리스트(List), 맵(Map) 이라는 자료구조를 반드시 이해하고 활용할 수 있어야 합니다. 이 세 가지 자료구조는 대부분의 코딩테스트 문제를 해결하는 데 필수적으로 사용되며, 활용 방법을 모르면 문제를 풀 수 없는 경우가 많습니다.


 

1️⃣ 배열(Array) - 가장 기본적인 데이터 구조

📌 배열이란?

배열(Array)은 고정된 크기의 동일한 타입의 데이터를 연속적으로 저장하는 자료구조입니다.

✔ 언제 사용할까?

  • 정해진 개수의 데이터를 저장해야 할 때

         → n개의 숫자가 주어집니다 라고 문제에서 주어진 경우.

 

  • 인덱스를 사용해 빠르게 접근해야 할 때

          → O(1) 시간 복잡도로 데이터를 조회 가능.

 

  • 데이터의 추가/삭제가 빈번하지 않을 때

          → 배열의 크기를 변경하는 것이 어렵기 때문.

 

💡 배열을 활용한 예제 (Java)

// 크기가 5인 정수형 배열 선언
int[] numbers = new int[5];

// 배열 초기화
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;

// 배열 값 출력
for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

➡️ 배열은 인덱스를 활용해 빠르게 데이터를 조회할 수 있지만 크기 변경이 어렵고 삽입/삭제가 어렵다는 단점이 있음.


 

2️⃣ 리스트(List) - 크기 가변적인 배열

📌 리스트란?

리스트(List)는 배열과 달리 크기가 동적으로 변하는 자료구조입니다.

즉, 데이터를 추가/삭제하는 것이 용이합니다.

✔ 언제 사용할까?

  • 데이터의 개수가 가변적일 때

→ 문제에서 입력 개수가 정해지지 않았다면 리스트가 필요.

  • 중간에 데이터를 추가/삭제해야 할 때

→ 배열과 다르게 크기를 유동적으로 변경 가능.

  • 배열보다 편리한 기능을 활용하고 싶을 때

→ 예를 들어, 정렬이나 특정 값 검색 등.

💡 리스트를 활용한 예제 (Java)

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>(); // 리스트 선언

        // 값 추가
        list.add(10);
        list.add(20);
        list.add(30);

        // 값 삭제
        list.remove(1); // 인덱스 1의 값 삭제

        // 값 출력
        for (int num : list) {
            System.out.println(num);
        }
    }
}

➡️ 리스트는 배열보다 유동적인 크기 조절이 가능하고 삽입/삭제가 용이한 장점이 있지만

인덱스 조회 성능은 배열보다 약간 떨어짐.


3️⃣ 맵(Map) - 키(Key)와 값(Value)으로 데이터 저장

📌 맵이란?

맵(Map)은 키(Key)와 값(Value) 형태로 데이터를 저장하는 자료구조입니다.

배열이나 리스트는 인덱스를 사용해 접근하지만 맵은 키를 통해 특정한 값을 빠르게 찾을 수 있음.

✔ 언제 사용할까?

  • 빠른 검색이 필요할 때

→ 키를 통해 O(1) 또는 O(logN)의 속도로 데이터를 조회 가능.

  • 데이터를 (Key, Value) 형태로 저장해야 할 때

→ 예를 들어, 학생의 성적을 저장할 때 {"홍길동": 90, "이순신": 85}.

  • 데이터 중복을 방지해야 할 때

→ 중복된 키를 허용하지 않음.

💡 맵을 활용한 예제 (Java)

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>(); // 맵 선언

        // 값 추가
        map.put("apple", 3);
        map.put("banana", 5);
        map.put("cherry", 7);

        // 값 조회
        System.out.println(map.get("banana")); // 5 출력

        // 값 삭제
        map.remove("apple");

        // 모든 키와 값 출력
        for (String key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }
    }
}

➡️ 맵은 빠른 데이터 조회가 가능하지만 데이터가 순서대로 저장되지 않는 특징이 있음.


🎯 결론: 코딩테스트에서 자료구조 선택 기준!

자료구조
언제 사용할까?
주요 특징
배열(Array)
정해진 개수의 데이터를 저장할 때
빠른 접근, 고정 크기
리스트(List)
데이터 개수가 유동적일 때
크기 조절 가능, 삽입/삭제 용이
맵(Map)
빠른 검색이 필요할 때
키-값 저장, 중복 키 없음

배열(Array): 고정된 크기의 데이터를 다룰 때 사용. 빠른 인덱스 조회가 강점.

리스트(List): 데이터의 개수가 가변적이고 삽입/삭제가 필요할 때 사용.

맵(Map): 특정 키로 값을 빠르게 찾을 때 유용. 검색 성능이 뛰어남.

📌 코딩테스트에서 가장 많이 활용되는 자료구조는 리스트(List)와 맵(Map)이다!

배열은 고정 크기의 데이터에 유용하지만 리스트는 더 유연한 데이터를 다룰 때 필수적

맵을 알면 검색과 데이터 관리가 훨씬 쉬워진다

'Java기반FullStack > CoTe' 카테고리의 다른 글

[프로그래머스/Java] 공원산책  (0) 2025.03.05

+ Recent posts