1. 오늘 학습 키워드 : Java 프로그래밍 ( 조건/반복문, 배열, 메소드 ), 계산기 과제
2. 학습 내용을 나만의 언어로 정리
Java는 클래스,객체로 이루어진 언어이다.
3. 학습내용
10:00 ~ 12:00 프로그래밍 과제 발제 ( 계산기 과제 , 박성규 튜터님 )
14:00 ~ 15:00 프로그래밍 기초 발제 ( 박성원 튜터님 )
[1-7 조건문]
컴퓨터는 스스로 조건/상태를 마주 할때, 사람처럼 스스로 판단을 할수가 없다.
// if-else 문 , 한가지 조건이 참이 될시, 그 조건식에 탈출된다.
if (조건식) {
명령문;
} else if (조건식) { // else if문은 여러개 작성 할수 있다.
명령문;
} else {
명령문;
}
// 예시
if ( 2 > 1 ) { // 2 > 1 은 true이므로 참이다.
System.out.println("참입니다.") // 실행됨.
} else {
System.out.println("거짓 입니다.");
}
// Switch문 ( 단일값과 일치한 조건에서 case가 시작된다. )
Switch (단일값) {
case 값1:
명령문;
break; // 탈출 버튼을 의미하며, 없으면 다음case문이 실행된다.
case 값2:
명령문;
break;
default: // 위의 값들과 일치하지 않을때 실행함.
명령문;
*실습 문제*

[1-8 반복문]
로봇에게 같은 동작을 10번 정도는 출력함수로 구현 가능하지만, 그 수가 100번 1000번등 너무많은 수를 요구하게 된다면, 비효율적인 코드가 작성이 된다.

break문 - 탈출버튼 ( 반복문을 빠져나온다 )
continue문 - 건너뛰기, Skip 버튼 ( 아래 반복으로 가지않고 바로 다음 반복으로 넘어간다 )
// for 반복문
int customers = 5;
for(int i=1; i<=customers; i++){
if(i == 4) {
break;
}
if (i == 2) {
continue;
}
System.out.println(i +" 번째 손님 안녕하세요!");
}
이외에도 while문과 do-while문 반복문 구조도 존재한다.
// while 반복문 ( for문과 다른 반복문 )
int i = 1; // 초기조건
while(i <= 10) { // 종결조건
System.out.println("안녕!");
i++; // 증감식
}
// while(true) { ... } 로 작성시 무한루프가 발생한다.
// do-while 반복문 ( 한번은 무조건 실행하는 do-while문)
int j = 1; // 초기조건
do {
System.out.println("아이고");
j++; // 증감식
} while (j <= 10); // 종결조건
*실습 문제*


[1-9 배열]
비슷한 주제의 데이터들을 하나의 그룹으로 묶어서 표현하는 것을 말한다.
정적배열 - 배열 생성시, 1번 크기를 정하면 변경할수 없다.
// 배열 선언
// 자료형[] 변수명 = new 자료형[배열길이];
int[] arr = new int[5]; // 5개의 데이터를 가진 정수형 배열이 생성됨. (정적배열, 20byte)
배열의 길이 메소드 (length)
// 배열 선언과 동시에 배열의 요소 할당
int[] arr = {10, 20, 30, 40, 50};
// [10] [20] [30] [40] [50]
// 배열의 길이 (length 메소드)
int arrlength = arr.length;
System.out.println("arrlength = " + arrlength); // 5가 출력됨.
배열의 요소 접근법 - 인덱스 활용
// 인덱스는 0부터 시작함.
int[] arr = {10, 20, 30, 40};
arr[0] = 20;
System.out.println(arr[0]); // 20
System.out.println(arr[1]); // 20
System.out.println(arr[2]); // 30
System.out.println(arr[3]); // 40
// System.out.println(arr[4]); // 인덱스 범위를 넘어서 BoundsofException 오류 발생 ! !
향상된 for문 ( ★ ★ ★ ) - 현업에서 많이 쓰인다. ( 인덱스 개념 X )
int[] arr = {10, 20, 30, 40};
for (int n : arr) { // n은 인덱스 요소 값을 의미함.
System.out.print(n + " ");
} // 10 20 30 40 출력됨
2차원 배열 - 가로(행, row) , 세로(열,column) 과 같이 좌표를 찍을때 등 사용된다.
// 2차원 배열
// boolean[][] board = new boolean[1][2];
// [] []
//
boolean[][] board = {
{true,false},
{false,true},
};
System.out.println(board[1][1]); // true;
*실습 문제*



[1-10 메소드]
여러개의 작은 명령문을 한곳에 모아 사용하는 단위 ( 작업을 표현하는법 = 메소드, 함수, 기능 )
메소드는 항상 클래스 내부에 존재한다.
호출부 - 메소드를 사용하는곳 ( 매개변수를 통해 전달 )
선언부 - 메소드가 정의되어 있는곳

Calculator 클래스 에서 더하기 메소드 함수 정의

메인 클래스에서 객체를 생성후 함수 호출! ( 반환값을 받기 때문에 변수에 담을 곳이 필요함. )

★ 여기서 반환 타입이 void 이면 반환값 (return)은 없다. void는 비어있다 의미.
[2-1 클래스와 객체]
클래스 : 객체를 만들때 필요한 청사진 ( 설계도 ) ○ 클래스명 첫글자는 대문자!!
객체 : 실제로 존재하는것, 객체를 만들때 new 키워드를 사용
인스턴스화 : 객체를 만드는 과정 , 인스턴스화가 되면 Java 메모리상에 객체가 만들어진다.
*실습문제*

[2-2 JVM 메모리 영역]
JVM에는 Method 영역, Stack영역, Heap 영역이 대표적으로 3개가있다. ( 그외에도 있긴함. )
Method(Static) 영역 - 클래스 정보 저장공간 ex) 책장
- Static으로 선언된 변수와 메소드 이곳에 위치함. ( 공용으로 사용가능한 데이터 영역 )
- 프로그램 실행시점 1번만 저장.
Stack (LIFO) 영역 - 메소드 실행시 사용되는 공간 ex) 접시쌓기
- 지역변수, 호출정보
Heap 영역 - 객체가 생성되어 저장되는 공간 ex) 풍선
- 객체는 Heap에 저장!!!
- new키워드로 생성된 객체는 모두 Heap영역
- Stack영역의 변수가 Heap영역의 객체를 참조하고 있음.
★ 가비지 컬렉터 ( Garbage Collector, GC )
Java의 사용하지 않는 객체들을 자동으로 제거하는 기능.
- new 키워드로 생성된 객체 > Heap영역으로 저장
- 사용이 끝난 객체는 메모리에 남아있으면 낭비.
- 가비지 컬렉터가 불필요한 객체를 자동으로 정리해서 메모리를 확보함.
[2-3 래퍼클래스(참조형)]
래퍼 클래스 - 기본 자료형을 객체로 감싸는 클래스 ( 객체 O ) > 내부적으로 tostring()이 오버라이딩 되어 있다
Integer { int } < 이런 개념임.
참조형 변수 - 변수에 객체가 담긴것. 데이터가 저장된 메모리주소를 가리킨다. ( Heap 영역, 객체데이터는 Heap!! )
왜 사용 하는가? - 기본형을 감싼 객체를 만들어 기능을 제공하면, 편리하게 데이터 처리를 할수 있다.
오토박싱( 기본형 > 래퍼형 )
Integer num = 10; // 오토박싱
// Integer num = Integer.valueOf(10);
// 컴파일 내부적으로 자동으로 일어남.
오토언박싱( 래퍼형 > 기본형 )
Integer num3 = 10;
int num = num3; // 오토 언박싱
// int a = num.intValue();
// 컴퓨터 내부적으로 자동으로 일어남.
※ 기본형 vs 래퍼형 연산식 성능차이 : 래퍼형은 내부적으로 데이터를 감싸고 있기 대문에 연산시 불리함.
객체에서 기본형 값을 꺼내서 연산하는 추가작업이 발생하기 때문에 기본형을 쓰는게 좋다.

- 오류사항 : Intellj IDE 가 무한 빌드에 빠져서 작동이 안되는 현상
- 해결: 튜터님과의 해결을 통해서, [settings] - [build] - [ builds tools ] - [gradle] - gradle로 다바꾸어서빌드하니 오류가 발생하지 않았다.
4. 내일 학습 할 것: 자바 2주차 완강, 개인 과제 해보기( 계산기 )
'[내일배움캠프-Sparta] > Spring 6기' 카테고리의 다른 글
| TIL 9 [ Java(예외처리, Optional, 제네릭, 컬렉션) ] (0) | 2025.02.27 |
|---|---|
| TIL 8 [ Java(final, static, 인터페이스, 객체지향) ] (0) | 2025.02.26 |
| TIL 6 [ Java( 개념,변수,입출력, 데이터타입, 연산자) ] (0) | 2025.02.24 |
| TIL 5 [ Linux명령어, git 복습 ] (0) | 2025.02.21 |
| TIL 4 [ 미니프로젝트 간단 웹 개발 / 배포 + TIL특강 ] (0) | 2025.02.20 |