
이번 시간부터는 직접 인텔리제이에 코딩을 해보면서 학습을 진행할
것이고, 지난 시간에 학습한 내용들과 이번 시간에 새롭게 배우는 것들 모두
직접 코딩을 하고 Git 으로 커밋을 관리하는 것까지 진행해보도록 하겠습니다.


인텔리제이 - 자바 프로젝트 생성
1. 인텔리제이를 실행합니다.

2. "Create New Project"를 클릭하면 "New Project" 대화상자가 나타납니다.

3. 프로젝트의 이름과 저장할 경로를 설정합니다. - Name: Gitjav-1th
4. 프로젝트의 JDK를 선택합니다. JDK가 설치되어 있지 않은 경우, "Download JDK" 버튼을 클릭하여 설치할 수 있습니다.

5."Create" 버튼을 클릭하여 프로젝트를 생성합니다.

자바 프로젝트 구조 - with. Maven
프로젝트 이름/
├── idea/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── 패키지 이름/
│ │ │ └── 클래스 파일들.java
│ │ ├── resources/
│ │ └── webapp/
│ ├── test/
│ │ ├── java/
│ │ │ └── 패키지 이름/
│ │ │ └── 테스트 클래스 파일들.java
│ │ └── resources/
│ └── 프로젝트 설정 파일 등
├── target/
│ ├── classes/
│ │ └── 패키지 이름/
│ │ └── 클래스 파일들.class
│ ├── test-classes/
│ │ └── 패키지 이름/
│ │ └── 테스트 클래스 파일들.class
│ ├── 프로젝트 이름-버전.jar
│ ├── 프로젝트 이름-버전-war/ (웹 애플리케이션일 경우)
│ └── ...
├── .gitignore
└── pom.xml
- idea: IntelliJ IDEA에서 프로젝트 설정 정보와 관련된 파일을 저장하는 폴더입니다. 이 폴더는 IntelliJ IDEA에서 자동으로 생성되며, 프로젝트 루트 디렉토리에 위치합니다.
이 폴더에는 프로젝트 구조, 빌드 설정, 라이브러리 의존성, 실행 및 디버그 구성 등 IntelliJ IDEA의 설정 정보를 포함합니다. 이 정보들은 로컬 머신에서 작업하는 개발자 개인의 환경에 맞게 설정되며, 이 .idea 폴더를 다른 컴퓨터로 복사하면 해당 프로젝트를 동일한 환경에서 다시 실행할 수 있습니다. - src: 소스 코드가 위치하는 디렉토리입니다. src 디렉토리 아래에 main과 test 디렉토리가 있습니다.
- main: 애플리케이션 코드가 위치하는 디렉토리입니다. main 디렉토리 아래에는 java, resources, webapp 디렉토리가 있습니다.
- java: 자바 소스 코드가 위치하는 디렉토리입니다. 패키지 이름과 같은 디렉토리 구조로 클래스 파일들이 위치합니다.
- resources: 자바 코드에서 사용되는 자원 파일(예: 프로퍼티 파일, 설정 파일 등)이 위치하는 디렉토리입니다.
- webapp: 웹 애플리케이션에서 사용되는 웹 자원(예: HTML, CSS, JavaScript, JSP, Servlet 등)이 위치하는 디렉토리입니다.
- test: 애플리케이션의 테스트 코드가 위치하는 디렉토리입니다. test 디렉토리 아래에도 java와 resources 디렉토리가 있습니다.
- java: 테스트 코드가 위치하는 디렉토리입니다. 패키지 이름과 같은 디렉토리 구조로 테스트 클래스 파일들이 위치합니다.
- resources: 테스트 코드에서 사용되는 자원 파일이 위치하는 디렉토리입니다.
- main: 애플리케이션 코드가 위치하는 디렉토리입니다. main 디렉토리 아래에는 java, resources, webapp 디렉토리가 있습니다.
- target: Maven이 컴파일한 클래스 파일, 테스트 클래스 파일, 빌드된 jar 파일 등이 위치하는 디렉토리입니다. Maven은 이 디렉토리를 자동으로 생성하고 관리합니다.
- .gitignore: Git 저장소에서 추적하지 않을 파일이나 폴더를 명시하는 파일입니다. 이 파일에 등록된 파일은 Git이 해당 파일을 무시하도록 설정되어, 변경 내역을 추적하지 않습니다.
- pom.xml: Maven 프로젝트의 메타데이터와 빌드 설정 등을 포함한 파일입니다. pom.xml 파일에는 프로젝트 이름, 버전, 개발자 정보, 의존성 라이브러리 등을 설정할 수 있습니다.
Maven ?
Maven은 자바 기반 프로젝트의 빌드, 테스트, 패키징, 배포 등을 자동화하는 빌드 도구입니다. Apache 소프트웨어 재단에서 개발하고 있으며, 오픈 소스 프로젝트로 공개되어 있습니다.
프로젝트의 라이브러리 의존성을 관리하고, 라이브러리를 다운로드하여 로컬 저장소에 저장합니다. 이를 통해 개발자는 라이브러리를 수동으로 다운로드하거나 라이브러리 버전 관리를 하지 않아도 됩니다. 또한 프로젝트의 빌드를 자동화하며, 이를 위해 프로젝트의 소스 코드와 리소스 파일을 빌드 가능한 형태로 변환합니다. 이렇게 빌드된 파일은 JAR, WAR, EAR 등의 패키징 형태로 배포될 수 있습니다.
Maven은 설정 파일을 통해 빌드 과정을 자세하게 제어할 수 있으며, 다양한 플러그인을 사용하여 빌드 과정을 확장할 수 있습니다. 또한 중앙 저장소를 통해 다른 개발자가 공유한 라이브러리를 쉽게 가져와 사용할 수 있도록 지원합니다. 그리고 자바 개발 프로젝트에서 매우 널리 사용되는 빌드 도구 중 하나입니다. 규칙 기반의 빌드 시스템으로서, 일관된 빌드 방식을 적용하고 개발자들 간의 협업을 쉽게 하기 때문에 다수의 개발자가 참여하는 프로젝트에서 매우 유용합니다.
자바 클래스 생성
[src/main/java] 디렉토리에서 마우스 우클릭 후 아래와 같이 창이 나타나면 [New -> Java Class] 를 클릭하여 클래스를 생성합니다.


클래스 제목으로 'JavaBasic_01' 로 설정하겠습니다. 참고로, 자바의 모든 클래스를 생성할 때는 꼭 영대문자로 해주셔야 합니다 !

처음 프로젝트를 생성할 때 [Create Git Repository]를 체크했기 때문에 프로젝트는 기본적으로 Git으로 초기화되어 있습니다. 인텔리제이는 기본적으로 Git을 지원하므로 클래스를 생성할 때마다 다음과 같이 새롭게 생성된 파일을 스테이지 할 것인지를 물어봅니다. 이후 문제가 발생하지 않도록 하기 위해 [Don't ask again]을 체크하고 [Cancel]을 눌러 취소하도록 합니다.

다음과 같이, src/main/java/JavaBasic_01 클래스가 생성된 것을 확인하실 수 있습니다.

자바의 기본 요소
자바의 기본 단위는 패키지, 클래스, 인터페이스, 메서드, 변수, 상수 등이 있습니다.
패키지 (Package): 클래스와 인터페이스를 논리적으로 그룹화하기 위한 단위입니다. 패키지는 관련된 클래스들을 모아서 이름을 지정할 수 있으며, 이를 통해 클래스의 이름 충돌을 방지하고, 코드의 구조화 및 유지보수를 용이하게 할 수 있습니다.
패키지는 보통 소문자로 작성하며, 패키지 내부에는 클래스와 인터페이스만 존재할 수 있습니다.
패키지는 점(dot)으로 구분된 하나 이상의 이름으로 이루어지며, 이는 하위 패키지를 포함한 계층 구조를 가질 수 있습니다.
예를 들어, com.example.app 패키지는 com 패키지의 하위 패키지인 example 패키지의 하위 패키지인 app 패키지를 나타냅니다.
패키지를 선언할 때에는 다음과 같이 package 키워드를 사용하여 선언합니다. 일반적으로 소스 코드 파일의 가장 첫 줄에 위치하며,
선언하지 않을 경우에는 기본 패키지(default package)에 속하게 됩니다.
package com.example.app;
Java에서 제공하는 클래스들은 대부분 패키지에 속해 있으며, java.lang 패키지는 자동으로 임포트됩니다. 따라서, java.lang 패키지 내부의 클래스를 사용할 때에는 별도의 임포트 없이도 사용할 수 있습니다.
그 외의 패키지의 클래스를 사용할 때에는, import 키워드를 사용하여 해당 클래스를 임포트해야 합니다.
import java.util.ArrayList;
public class MyClass {
// ...
ArrayList<String> myList = new ArrayList<String>();
// ...
}
클래스 (Class): 객체 지향 프로그래밍에서 가장 기본이 되는 단위로, 객체를 생성하기 위한 청사진(blueprint)입니다. 클래스는 객체의 상태를 나타내는 필드와 객체의 행동을 구현하는 메서드를 포함합니다.
클래스는 멤버 변수(필드)와 메소드로 구성되어 있으며, 멤버 변수는 클래스가 가지는 상태(state)를 표현하고, 메소드는 클래스의 동작(behavior)을 표현합니다.
[접근 제한자] [클래스 유형] 클래스이름 {
// 멤버 변수
[접근 제한자] [데이터 타입] 변수이름;
[접근 제한자] [static] [데이터 타입] 변수이름;
// 생성자
[접근 제한자] 클래스이름([매개변수...]) {
// 객체 생성시 초기화 작업 수행
}
// 메소드
[접근 제한자] [static] [반환 타입] 메소드이름([매개변수...]) {
// 메소드가 수행할 작업 구현
}
}
public class MyClass {
// 필드 (멤버 변수)
private int myField;
// 생성자
public MyClass(int myField) {
this.myField = myField;
}
// 메서드 (멤버 함수)
public void myMethod() {
System.out.println("My field value is: " + myField);
}
}
- 접근 제한자(Access Modifier)는 클래스, 멤버 변수, 메소드에 대한 접근 범위를 제한하는 역할을 하며, public, protected, default, private 등이 있습니다.
- 클래스 유형(Class type)은 클래스의 종류를 나타내며, 일반 클래스, 추상 클래스, 인터페이스 등이 있습니다.
- 멤버 변수(필드, Field)는 클래스가 가지는 상태를 표현하기 위한 변수로, 클래스 내부에서 선언됩니다. 또한 static으로 선언된 멤버 변수나 메소드는 인스턴스 생성 없이 바로 사용할 수 있다는 특징이 있습니다.
- 생성자(Constructor)는 객체를 생성할 때 자동으로 호출되는 메소드로, 객체 생성시 초기화 작업을 수행합니다.
- 메소드(Method)는 클래스의 동작을 구현한 함수이며, 클래스 내부에서 선언됩니다.
클래스는 다른 클래스나 메소드에서 객체를 생성하고 사용할 수 있으며, 상속을 통해 기존 클래스를 확장할 수도 있습니다. 객체를 생성하는 방법은 다음과 같습니다.
클래스이름 변수이름 = new 클래스이름();
이렇게 생성된 객체는 클래스 내부의 멤버 변수나 메소드에 접근할 수 있으며, 클래스 내부의 멤버 변수나 메소드에 static 키워드가 붙어있는 경우 객체 생성 없이 바로 접근할 수 있습니다.
인터페이스 (Interface): 클래스와 마찬가지로 메서드와 필드를 가지지만, 메서드는 추상 메서드(abstract method)와 디폴트 메서드(default method)만을 포함합니다. 인터페이스는 다중 상속과 같은 특수한 상황에서 유용하게 사용됩니다.
자바에서 인터페이스(Interface)란, 메서드의 선언만 있고 구현은 없는 추상적인 개념입니다. 즉, 인터페이스는 클래스가 구현해야하는 메서드의 명세(specification)를 정의하는 역할을 합니다.
인터페이스는 다음과 같은 특징을 갖습니다.
- 추상 메서드만 포함: 인터페이스는 추상 메서드만을 포함하며, 일반적인 메서드 구현이 불가능합니다. 추상 메서드란, 메서드의 선언만 있고 구현 내용이 없는 메서드를 말합니다.
- 다중 상속 지원: 클래스와는 달리 인터페이스는 다중 상속을 지원합니다. 여러 개의 인터페이스를 상속받아 하나의 클래스에서 구현할 수 있습니다.
- 상수 필드를 가질 수 있음: 인터페이스는 상수 필드를 가질 수 있으며, 이는 인터페이스를 구현한 클래스에서 사용할 수 있습니다.
인터페이스를 사용하는 이유는 다음과 같습니다.
- 다형성 구현: 인터페이스를 이용하면 다형성을 구현할 수 있습니다. 인터페이스를 구현한 클래스들은 모두 같은 타입으로 취급되어, 각 객체를 동일한 방식으로 다룰 수 있습니다.
- 클래스 간 결합도를 낮춤: 인터페이스를 이용하면 클래스 간 결합도를 낮출 수 있습니다. 인터페이스를 이용하여 클래스를 설계하면, 클래스 간의 의존성을 낮춰 변경이 용이한 코드를 작성할 수 있습니다.
- 코드 재사용성: 인터페이스를 이용하면 코드 재사용성을 높일 수 있습니다. 인터페이스를 구현한 다른 클래스에서 이미 구현한 메서드를 사용할 수 있으며, 이는 중복코드를 줄일 수 있습니다.
public interface Drawable {
void draw(); // 도형을 그리는 메서드
}
메서드 (Method): 클래스나 인터페이스 내부에서 특정한 기능을 수행하는 코드의 묶음입니다. 메서드는 입력값을 받아들일 수 있고, 결과값을 반환할 수 있으며, 클래스나 인터페이스 내부에서 호출됩니다.
자바에서 메서드(Method)는 클래스 또는 인터페이스에서 정의된 기능을 수행하는 코드 블록입니다. 메서드는 객체 지향 프로그래밍에서 중요한 역할을 하며, 코드의 재사용성과 모듈화를 가능하게 합니다.
자바의 메서드는 다음과 같은 구조를 갖습니다.
[접근제한자] [static] [반환타입] [메서드이름](매개변수 리스트) {
// 메서드 구현
}
접근제한자는 메서드의 접근 범위를 지정하며, static 키워드는 정적 메서드를 선언할 때 사용합니다. 반환타입은 메서드가 반환하는 값의 데이터 타입을 지정하며, 메서드이름은 메서드의 이름을 의미합니다. 매개변수 리스트는 메서드가 받는 인자의 데이터 타입과 이름을 지정합니다.
다음은 간단한 예시 코드입니다.
public int add(int a, int b) {
return a + b;
}
위 코드에서 add 메서드는 두 개의 int 타입 매개변수를 받아 덧셈 연산을 수행하고, 그 결과를 int 타입으로 반환합니다.
메서드는 다음과 같은 기능을 수행할 수 있습니다.
- 객체의 속성값을 변경하는 기능
- 객체의 속성값을 반환하는 기능
- 객체의 특정한 동작을 수행하는 기능
- 객체 간의 상호작용을 위한 기능
자바에서 메서드는 코드의 재사용성을 높이고, 모듈화를 가능하게 함으로써 유지보수성을 높이는 중요한 요소입니다.
변수 (Variable): 데이터를 저장하기 위한 메모리 공간으로, 값이 변경될 수 있는 변수와 변경될 수 없는 상수로 구분됩니다.
상수 (Constant): 값이 변경될 수 없는 변수로, final 키워드를 사용하여 선언합니다. 상수는 프로그램에서 변하지 않는 값을 나타내는 데 사용됩니다.
변수는 다음과 같이 선언됩니다.
[데이터타입] [변수이름] = [값];
위 구조에서 데이터타입은 변수에 저장할 값의 데이터 타입을 의미하며, 변수이름은 변수의 이름을 의미합니다. 값은 변수에 초기화할 값이며, 생략 가능합니다.
다음은 변수의 예시 코드입니다.
int a = 10;
String str = "Hello, World!";
double pi = 3.14;
상수는 다음과 같이 선언됩니다.
final [데이터타입] [상수이름] = [값];
위 구조에서 데이터타입은 상수에 저장할 값의 데이터 타입을 의미하며, 상수이름은 상수의 이름을 의미합니다. 값은 상수에 대입할 값이며, 생략할 수 없습니다.
다음은 상수의 예시 코드입니다.
final int MAX_VALUE = 100;
final double PI = 3.14159;
final String GREETING = "Hello";
상수는 값을 변경할 수 없으므로, 보통 프로그램에서 고정된 값이 필요할 때 사용합니다. 상수는 값을 변경할 수 없기 때문에, 상수를 사용하면 코드의 가독성을 높이고, 실수로 값을 변경하는 버그를 방지할 수 있습니다.
패키지 생성 및 클래스 이동 [실습]
[src/main/java] 디렉토리에서 마우스 우클릭 후 다음과 같이 'data_type' 이라는 이름의 패키지를 하나 생성하겠습니다.


'data_type' 패키지가 생성되면 이전에 만들었던 'JavaBasic_01' 클래스 파일을 이동시키도록 하곘습니다.


그러면 자동으로 'JavaBasic_01' 클래스 최상단에 현재 클래스 파일이 어떠한 패키지에 있는지 자동으로 나타납니다.

Hello, GitJav !
public class JavaBasic_01 {
public static void main(String[] args) {
System.out.println("Hello, GitJav !");
}
}
해당 자바 코드는 "Hello, GitJav !"라는 문자열을 출력하는 간단한 프로그램입니다.
이 프로그램은 JavaBasic_01이라는 이름의 클래스를 정의하고 있습니다. 클래스는 자바에서 프로그램의 기본 단위입니다. 클래스는 객체를 만들기 위한 속성과 메서드를 정의하는데 사용됩니다. class 키워드는 클래스를 정의할 때 사용하는 키워드입니다.
public 키워드는 해당 클래스가 공개(public)된 클래스임을 나타냅니다. 이 키워드는 다른 패키지에서도 접근할 수 있도록 클래스를 공개하는 역할을 합니다.
클래스 내부에는 main 메서드가 정의되어 있습니다. main 메서드는 프로그램이 시작될 때 가장 먼저 실행되는 메서드로, 프로그램의 진입점(entry point) 역할을 합니다.
main 메서드는 public 키워드로 공개되어 있으며, static 키워드로 정적 메서드(static method)임을 나타냅니다.
void 키워드는 main 메서드가 반환하는 값이 없음을 의미합니다. String[] args는 main 메서드가 문자열 배열을 입력으로 받음을 나타냅니다.
System.out.println은 콘솔에 출력하는 메서드입니다. "Hello, GitJav !"는 출력할 문자열입니다. 따라서 이 프로그램은 "Hello, GitJav !"라는 문자열을 콘솔에 출력하는 것이 목적입니다.
이 프로그램을 실행하면 "Hello, GitJav !"라는 문자열이 콘솔에 출력됩니다.

주석(comment)

해당 코드는 자바에서 주석(comment)을 다는 방법을 보여주는 예시입니다. 주석은 코드에 대한 설명이나 메모 등을 추가할 때 사용되며, 컴파일러는 주석을 무시합니다.
주석에는 한 줄 주석(single line comment)과 여러 줄 주석(multi-line comment)이 있습니다.
// 기호를 이용하여 한 줄 주석을 작성할 수 있습니다. // 이후에 작성한 내용은 그 줄의 끝까지 주석 처리됩니다.
/*와 */ 기호를 이용하여 여러 줄 주석을 작성할 수 있습니다. /*와 */ 사이에 작성한 모든 내용은 주석 처리됩니다.
따라서 해당 코드에서는 main 메서드에 대한 주석이 작성되어 있습니다. 첫 번째 주석은 한 줄 주석으로, 두 번째와 세 번째 주석은 여러 줄 주석으로 작성되어 있습니다. 주석은 프로그램의 가독성을 높이는데 도움을 주며, 코드에 대한 이해를 쉽게 돕는 역할을 합니다.
자바 변수 선언 및 초기화 [실습]

리터럴(literal) ?
자바에서 리터럴(literal)은 변수나 상수에 대입할 값으로 사용되는 데이터 그 자체를 말합니다. 즉, 변수에 값을 할당할 때 사용되는 고정된 값입니다. 예를 들어, int num = 10;에서 10은 정수형 리터럴입니다.
자바에서 사용되는 리터럴은 데이터 타입에 따라 다양한 형태를 가질 수 있습니다.
- 정수형 리터럴 : 10, 0x10(16진수), 010(8진수)과 같이 10진수, 16진수, 8진수 등의 형태를 가질 수 있습니다.
- 실수형 리터럴 : 3.14, 3.14F(float형), 3.14D(double형)와 같이 소수점을 가지는 값을 사용할 수 있습니다. 또한, float형 리터럴은 끝에 F를 붙이고, double형 리터럴은 끝에 D를 붙일 수 있습니다.
- 논리형 리터럴 : true, false와 같이 참 또는 거짓을 나타내는 값을 사용할 수 있습니다.
- 문자형 리터럴 : 'A', 'a'와 같이 작은따옴표로 감싸진 하나의 문자를 사용할 수 있습니다. 또한, 이스케이프 시퀀스를 사용하여 특수한 문자도 나타낼 수 있습니다.
- 문자열 리터럴 : "Hello, world!"와 같이 큰따옴표로 감싸진 문자열을 사용할 수 있습니다.
리터럴은 자바에서 상수(constant)를 선언하는데도 사용됩니다. 상수는 값을 변경할 수 없는 변수를 말하며, final 키워드를 사용하여 선언합니다. 예를 들어, final int MAX_VALUE = 100;에서 100은 정수형 상수의 리터럴입니다.
기본 자료형(primitive type)과 참조 자료형(reference type)은 자바에서 사용하는 자료형의 두 가지 유형입니다.
기본 자료형은 미리 정의된 자료형으로서 값을 직접 저장하는 자료형이며, 참조 자료형은 객체(object)를 참조(reference)하는 자료형입니다.
리터럴(literal)은 자바에서 값 그 자체를 의미합니다. 즉, 리터럴은 변수에 할당되는 값의 형태입니다. 기본 자료형의 리터럴 값은 변수에 직접 저장되지만, 참조 자료형의 경우 변수에는 객체의 참조 값(reference value)이 저장됩니다. 즉, 참조 자료형 변수에는 객체의 주소가 저장되어 있는 것입니다.
예를 들어, int num = 10;에서 10은 int형 리터럴 값입니다. 이 경우, num 변수에는 10이 직접 저장됩니다. 하지만 String str = "Hello";에서 "Hello"는 String 참조 자료형의 리터럴 값입니다. 이 경우, str 변수에는 "Hello" 객체의 주소가 저장되어 있는 것입니다.
따라서, 기본 자료형과 참조 자료형 모두 리터럴 값을 가질 수 있지만, 기본 자료형은 리터럴 값 그 자체를 변수에 저장하고, 참조 자료형은 객체의 주소를 변수에 저장하는 차이가 있습니다.
형변환 ?
자동 형변환 (Implicit Type Casting)
- 작은 자료형에서 큰 자료형으로 형변환하는 것으로, 자동으로 이루어집니다.
- 작은 자료형을 큰 자료형에 대입하면 자동으로 형변환됩니다.
예를 들어, int형 변수 num1과 double형 변수 num2가 있을 때, num1이 num2에 대입될 경우 int형에서 double형으로 자동 형변환이 이루어집니다.
int num1 = 10;
double num2 = num1; // 자동 형변환 발생
System.out.println(num2);
자동 형변환은 작은 자료형에서 큰 자료형으로 형변환할 때 발생합니다. 이러한 형변환의 방향은 항상 작은 자료형에서 큰 자료형으로 이루어집니다. 이는 자료형의 크기와 관련이 있습니다.

자료형은 메모리 상에서 차지하는 크기가 다릅니다. 따라서 더 작은 자료형에서 더 큰 자료형으로 형변환하는 것은 큰 자료형에 더 많은 메모리를 할당할 수 있으므로 문제가 되지 않지만, 그 반대의 경우 데이터 손실이 발생할 수 있습니다. 따라서 자동 형변환은 작은 자료형에서 큰 자료형으로 형변환할 때 발생하며, 큰 자료형에서 작은 자료형으로 형변환하려면 명시적으로 형변환을 수행해야 합니다.
각 타입들 사이의 형변환 방향은 다음과 같습니다:
- byte → short → int → long → float → double
- char → int
- boolean은 다른 자료형으로 자동 형변환이 불가능하며, 명시적인 형변환만 가능합니다.

강제 형변환 (Explicit Type Casting)
- 큰 자료형에서 작은 자료형으로 형변환하는 것으로, 강제로 이루어집니다.
- 큰 자료형을 작은 자료형에 대입하면 자동 형변환이 일어나지 않기 때문에 강제 형변환을 사용해야 합니다.
- 강제 형변환은 (변환하려는 자료형)변수명 형태로 사용됩니다.
예를 들어, double형 변수 num1과 int형 변수 num2가 있을 때, num1을 num2에 대입하려면 강제 형변환을 사용해야 합니다.
num2 = (int)num1;
하지만 강제 형변환이 일어날 경우, 값의 손실이 발생할 수 있으므로 주의해야 합니다. 예를 들어, double형 변수에는 정수형 변수에 담을 수 없는 소수점 아래 값이 있을 수 있습니다. 따라서 double형 변수를 int형으로 형변환할 경우, 소수점 아래 값을 버리고 정수 부분만을 취하게 됩니다.

제어문
IF 문
자바에서 if문은 조건에 따라 프로그램의 실행 흐름을 제어하는 제어문 중 하나입니다. if문은 주어진 조건식이 참(True)인 경우에만 해당 코드 블록을 실행하며, 거짓(False)인 경우에는 실행하지 않습니다.
if문은 다음과 같은 형식으로 작성됩니다.
if (조건식) {
// 조건식이 참일 때 실행될 코드
}
조건식은 참(True) 또는 거짓(False)을 평가할 수 있는 표현식(expression)이며, 중괄호 {} 안에 실행될 코드는 조건식이 참일 때만 실행됩니다.
if문은 단독으로 사용될 수도 있지만, else문과 함께 사용하여 조건식이 거짓일 때 실행될 코드도 작성할 수 있습니다. 이 경우 if문과 함께 작성된 else문은 다음과 같은 형식으로 작성됩니다.
if (조건식) {
// 조건식이 참일 때 실행될 코드
} else {
// 조건식이 거짓일 때 실행될 코드
}
if문은 또한 중첩(nested)될 수 있으며, 이는 다중 조건식(multiple condition)을 사용하여 여러 상황을 처리하는데 유용합니다. 이 경우, 각각의 조건식은 괄호()로 묶여서 표현됩니다.
if (조건식1) {
// 조건식1이 참일 때 실행될 코드
} else if (조건식2) {
// 조건식1이 거짓이고, 조건식2가 참일 때 실행될 코드
} else if (조건식3) {
// 조건식1과 조건식2가 거짓이고, 조건식3이 참일 때 실행될 코드
} else {
// 모든 조건식이 거짓일 때 실행될 코드
}
int x = 10;
if (x > 0) {
System.out.println("x는 양수입니다.");
} else if (x == 0) {
System.out.println("x는 0입니다.");
} else {
System.out.println("x는 음수입니다.");
}

Switch 문
자바에서 switch문은 if문과 비슷하게, 조건에 따라 프로그램의 실행 흐름을 제어하는 제어문 중 하나입니다. switch문은 변수나 표현식의 값에 따라 실행되는 코드 블록을 선택하며, 각각의 경우(case)에 따라 실행할 코드를 작성합니다.
switch문은 다음과 같은 형식으로 작성됩니다.
switch (변수 또는 표현식) {
case 값1:
// 값1일 때 실행될 코드
break;
case 값2:
// 값2일 때 실행될 코드
break;
case 값3:
// 값3일 때 실행될 코드
break;
// ...
default:
// 모든 case에 해당하지 않을 때 실행될 코드
break;
}
변수 또는 표현식은 switch문에서 비교할 값을 나타내며, case 문은 해당하는 값일 때 실행할 코드를 작성합니다. case 문의 값은 정수, 문자, 문자열 또는 열거형(enum) 상수와 같은 상수(Constant) 값이어야 합니다. 각 case 문은 콜론(:)으로 끝나야 하며, case 값이 해당할 때 실행될 코드를 중괄호 {}로 묶어서 작성합니다.
또한, 각각의 case 문은 break 문으로 종료됩니다. 만약 break 문이 없으면, 다음 case 문까지 계속 실행되며, 해당하는 모든 case 문의 코드가 실행됩니다. default 문은 모든 case 문에 해당하지 않을 때 실행되는 코드를 작성하는데 사용됩니다.
아래는 switch문을 사용하여 변수 x가 어떤 값인지에 따라 다른 코드를 실행하는 예시 코드입니다.
int x = 2;
switch (x) {
case 1:
System.out.println("x는 1입니다.");
break;
case 2:
System.out.println("x는 2입니다.");
break;
case 3:
System.out.println("x는 3입니다.");
break;
default:
System.out.println("x는 1, 2, 3 중 아닙니다.");
break;
}

반복문
자바에서 반복문은 동일한 코드 블록을 반복적으로 실행할 때 사용하는 제어문 중 하나입니다. 반복문은 주로 배열이나 리스트와 같은 데이터 집합을 처리하거나, 특정한 조건을 만족할 때까지 코드를 반복적으로 실행할 때 사용됩니다. 자바에서는 크게 for문, while문, do-while문 세 가지 종류의 반복문이 제공됩니다.
for 문
for문은 지정된 횟수만큼 반복할 때 사용됩니다. for문의 기본적인 형식은 다음과 같습니다.
for (초기식; 조건식; 증감식) {
// 반복 실행할 코드
}
초기식은 반복문이 시작될 때 한 번 실행되는 초기화 코드입니다. 조건식은 반복문이 계속해서 실행될지 여부를 결정하는 조건을 나타내며, 증감식은 반복 실행될 때마다 실행되는 코드입니다. 조건식이 참(True)이면, 반복문이 실행되고, 거짓(False)이면 반복문이 종료됩니다.
예시로, 1부터 10까지 출력하는 for문을 작성하면 다음과 같습니다.
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}

for-each 문
자바의 foreach문은 배열과 컬렉션(Collection) 객체를 반복하면서 요소들에 접근할 수 있는 반복문입니다. foreach문은 일반적인 for문과는 달리 배열이나 컬렉션 객체의 길이나 크기를 직접적으로 조작하지 않고, 요소에 직접 접근하여 사용합니다.
foreach문은 다음과 같은 형태로 작성됩니다.
for (데이터_타입 변수_이름 : 배열_또는_컬렉션) {
// 반복적으로 실행할 코드
}
위 구문에서 데이터 타입은 배열 또는 컬렉션 객체에 저장된 데이터의 타입을 나타내고, 변수 이름은 해당 데이터를 참조하기 위한 변수의 이름입니다. 반복적으로 실행할 코드는 중괄호 내부에 작성됩니다. foreach문을 사용할 때는 변수 이름이 반드시 배열 또는 컬렉션 객체의 데이터 타입과 일치해야 합니다.
아래는 배열을 foreach문을 사용하여 반복하는 예시 코드입니다.
int[] numbers = {1, 2, 3, 4, 5};
for (int num : numbers) {
System.out.print(num + " ");
}

위 코드에서는 int형 배열 numbers에 저장된 데이터를 foreach문을 사용하여 반복적으로 출력합니다. 배열에 저장된 모든 데이터를 반복적으로 출력하고, 각 요소들은 공백으로 구분됩니다.
while문
while문은 조건식이 참(True)인 동안에만 반복적으로 실행됩니다. while문의 기본적인 형식은 다음과 같습니다.
while (조건식) {
// 반복 실행할 코드
}
조건식이 참(True)일 경우, 중괄호 안의 코드가 반복적으로 실행되며, 조건식이 거짓(False)이 될 때까지 반복됩니다.
예시로, 1부터 10까지 출력하는 while문을 작성하면 다음과 같습니다.
int i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}

do-while문
do-while문은 while문과 거의 동일하지만, 조건식이 반복문의 마지막에 평가되므로, 최소 한 번은 실행됩니다. do-while문의 기본적인 형식은 다음과 같습니다.
do {
// 반복 실행할 코드
} while (조건식);
while문과는 달리 조건식이 반복문의 끝에 위치하며, 중괄호 안의 코드 블록을 우선 실행하고 조건식을 평가합니다. 만약 조건식이 참(True)이면, 반복문의 시작 부분으로 돌아가서 다시 실행됩니다. 이 과정이 조건식이 거짓(False)이 될 때까지 반복됩니다.

Label ?
자바에서 레이블(Label)은 특정 코드 블록에 이름을 붙이는 기능을 제공합니다. 레이블은 보통 중첩된 반복문에서 사용되며, 특정 반복문에서 break, continue 등의 제어문을 사용할 때 사용됩니다.
레이블은 다음과 같은 형식으로 작성합니다.
labelName:
레이블 이름은 콜론(:)으로 끝나는 식별자(identifier)입니다. 레이블 이름은 일반적으로 의미 있는 이름을 사용하는 것이 좋습니다.
다음은 레이블을 사용한 예시입니다.
outerLoop:
for(int i = 1; i <= 5; i++) {
innerLoop:
for(int j = 1; j <= 5; j++) {
if(i * j > 6) {
break outerLoop;
}
System.out.println(i + " " + j);
}
}

위 예시에서는 outerLoop 레이블을 바깥쪽 반복문에, innerLoop 레이블을 안쪽 반복문에 붙였습니다. 이제 break 문을 사용하여 특정 레이블로 이동할 수 있습니다.
위 예시에서는 innerLoop 레이블을 사용하여 안쪽 반복문에서 break를 호출하면 안쪽 반복문이 종료되고, 바깥쪽 반복문이 계속 실행됩니다. 하지만 outerLoop 레이블을 사용하여 바깥쪽 반복문에서 break를 호출하면 바깥쪽 반복문이 종료됩니다.
레이블을 사용하면 중첩된 반복문에서 특정 반복문을 선택적으로 종료하거나, 선택적으로 이동할 수 있어서 유용합니다. 그러나 레이블을 남용하면 코드의 가독성이 나빠질 수 있으므로, 사용할 때 주의해야 합니다.
Quiz !

*
**
***
****
*****

GitJav 1기 - 오프라인 멘토링 활동사진



불펌금지!
'🏄🏻♂️ : activity' 카테고리의 다른 글
| GitJav 멘토링: Java 기초 문법 총정리 및 Git 사용법 ep.4 (0) | 2023.05.17 |
|---|---|
| GitJav 멘토링: JAVA 배열, 클래스, 객체, 인터페이스, 상속 ep.3 (0) | 2023.05.03 |
| GitJav 멘토링: 자바의 변수와 자료형, 연산자 ep.1 (0) | 2023.04.12 |
| GitJav 멘토링: 오리엔테이션 ep.0 (0) | 2023.04.05 |
| '바코드 동아리' 멘토링 클래스: GitJav 1기 - 프롤로그 (0) | 2023.04.03 |