2021.10.13(수)
수업 내용
1교시: Java 프로그래밍 소개(반복)
2교시: Java 환경설정(반복)
3~4교시: Eclipse 프로젝트 구성
- Java project > packages > classes
- 주석문
- 객체 생성 예시: MethodTest mt = new MethodTest();
// project 먼저 생성 > packages > classes
// 우리가 쓰는 건 Java version 1.8
// 문법은 googling하면 다 나옴; 컴퓨터 작동 원리를 이해하자
// 컴퓨터 프로그램은 위->아래 실행 + 컴퓨터는 0과 1 밖에 모름
package com.kh.first; // 패키지 선언부; 현재 클래스의 위치
/* 패키지
* 한 패키지 안에 여러 개의 클래스들이 존재할 수 있음; 단, 동일한 이름의 클래스는 존재할 수 없음
* 모든 클래스들이 동일한 패키지 안에 존재하고 있으면 관리가 힘듦 -> 클래스들을 용도에 맞게 구분해서 패키지에 보관하는 것이 좋음
*
* 권장사항!
* 1. 패키지는 적어도 3단계 이상으로 만들어 주는 것을 권장
* e.g. com.kh.first
* com(레벨1).회사이름(레벨2).프로젝트/팀/카테고리 이름 등(레벨3, 어떤 작업인지 표시)
* 2. 패키지의 두번째 레벨까지는 도메인의 역순으로 만듦
* 왜냐하면 도메인 주소(e.g. kh, google, naver 등)는 고유한 값이기 때문에 중복 방지 가능
* 왜냐하면 도메인 주소만 봐도 어느 회사에서 제작한 프로젝트인지 파악 가능
*/
// 주석의 종류
// 1. 한 줄 주석(//): 주석 내용이 한 줄일 때 사용; "//" 다음부터 줄의 끝까지의 내용이 주석으로 간주
/* 2. 여러 줄 주석(/* ...): 여러 줄의 주석이 필요할 때 사용
* 이
* 사이의
* 모든
* 내용이
* 주석으로
* 간주
*/
/** 누가 만들었고
* 용도는 뭐고..
* library 만들 때 사용하는 주석
* 지금 나는 필요 없을 것..
*/
/* 주석문
* 주석은 프로그램의 실행에 영향을 끼치지 않음; 어느 데나 있어도 됨
* 코드를 작성한 후 그 코드를 이해하기 쉽도록 하기 위해 작성
* 주석을 달아놓으면, 설명을 달아놓았기 때문에, 유지/보수 시간을 줄일 수 있음
*/
public class HelloWorld { // 클래스 이름은 HelloWorld로 지었음; 클래스 영역 시작
// 중괄호{ }: 각 요소마다 갖는 scope(영역, code block) 설정; 변수는 이 안에서 선언되고 사용됨
// main 메소드(): 프로그램의 시작점(entry point); 호출하지 않아도 프로그램이 실행되면 실행됨; 프로그램(여기서 정확한 의미는 무엇인가?)당 최소 1개는 갖고 있어야 함
public static void main(String[] args) { // main 메소드 영역 시작
/* 메소드(method): 사전적으로는 '기능'을 의미 -> 하나의 기능 단위
* 뒤에 괄호() 붙어있음
* 하나의 클래스 안에 여러 개의 메소드가 존재할 수 있음
* 메소드를 사용할 때 "호출(call)"이라고 함
*/
// semi-colon(;): 논리적인 한 문장이 끝날 때 반드시 세미콜론을 붙임
System.out.println("Hello, World!" // out = 출력, println() = 출력해서 보여주는 기능의 메소드; syso ctrl+space
+ " My name is Eunyoung."
+ " Happy to meet you all! How are you today?"); // run as java application, ctrl+F11
printMyName(); // 메소드 호출
printMyAge();
printMyJob();
} // main 메소드 영역 끝
public static void printMyName() { // 내 이름을 출력하는 새로운 메소드 생성; 호출하지 않으면 기능 안 함; static으로 만들었기 때문에 다른 영역(?)에서 new 생성하지 않고도 호출/사용 가능(line58)
System.out.println("제 이름은 은영입니다.");
}
public static void printMyAge() {
System.out.println("제 나이는 36세입니다.");
}
public static void printMyJob() {
System.out.println("제 직업은 백엔드웹개발자입니다.");
}
} // 클래스 영역 끝
5교시: 변수(Variable)
- 변수 = 하나의 값을 저장하는 메모리 공간
- 변수의 특징
- 값이 바뀔 수 있음
- 변수/자료형마다 크기가 정해져있음
- 형 변환
- 자료형이 지정되어 있음
- code block 안에서 선언 및 사용됨
- 참조형 변수는 주소 값을 저장함
- 공간이 하나 = 주소가 하나 = 값을 하나만 받음 = 하나의 공간에 하나의 값만 담을 수 있음
// 변수의 필요성
// 시급과 근무시간과 근무일수를 곱해서 주급을 계산하는 메소드 calPay() 시작
public void calPay() {
System.out.println("-------변수 사용하기 전-------"); // 문자열은 쌍따옴표" "로 묶어서 처리
System.out.println("시급 : 9380원"); // System도 클래스이기 때문에 대문자로 시작; 시급 8950원에서 9380원으로 인상
System.out.println("근무시간 : 8시간/일"); // 근무시간 6시간 --> 8시간/일 변동
System.out.println("근무일수 : 5일/주");
// 주급 = 시급 * 근무시간 * 근무일수
// 출력 형식: "이름 : xx원"
// + 기호: 숫자 더하기; 값과 값을 붙일 때 사용
// * 기호: 숫자 곱하기
System.out.println("은영 : " + (9380 * 8 * 5) + "원"); // 9380 * 6 * 5가 수식 한 묶음임을 명확하게 하기 위해/가독성을 위해 괄호로 묶어줌
System.out.println("토미 : " + (9380 * 8 * 5) + "원");
System.out.println("미피 : " + (9380 * 8 * 5) + "원");
System.out.println("해피 : " + (9380 * 8 * 5) + "원");
System.out.println("무민 : " + (9380 * 8 * 5) + "원");
System.out.println("판다 : " + (9380 * 8 * 5) + "원");
// 변수 사용 전에는 인수(?)의 값 변할 때마다 각 직원의 수식 일일이 고쳐줌 -> 실수 발생할 가능성 크고, 번거롭고..
System.out.println("-------변수 사용 후-------");
// 시급, 근무시간, 근무일수라는 값을 각각 담을 공간(변수)을 만들고 값을 담음 = 변수 사용 -> 생산성 증가
// pay, time, day는 공간에 이름 붙인 것임
int pay = 9420; // 시급; 시급 8980원에서 9420원으로 인상
// 등호(=): 대입(assignment) 연산자(오른쪽의 값을 왼쪽에 담는다)(o) 같다(equality)(x);
int time = 8; // 근무시간
int day = 5; // 근무일수
System.out.println("시급 : " + pay + "원");
System.out.println("근무시간 : " + time + "시간/일");
System.out.println("근무일수 : " + day + "일/주");
System.out.println("혁이 : " + (pay * time * day) + "원");
System.out.println("유베 : " + (pay * time * day) + "원");
System.out.println("스노크메이든 : " + (pay * time * day) + "원");
// 변수 사용 후에는 변수에 대입되는 값만 고쳐주면 모든 직원의 주급 계산에 적용됨
/* 변수 사용 이유
* 1. 변수는 (naming을 통해) 값에 의미를 부여 -> 가독성 높여줌
* 2. 단 한 번의 값을 기록함으로써 필요할 때마다 재사용 가능 -> 재사용성 높여줌
* 3. 가독성과 재사용성 높아짐으로써 유지/보수 용이해짐
*/
} // 메소드 calPay() 영역 끝
6교시: 변수 선언, 식별자
- 변수 선언 방법
- 식별자란?
- 식별자 명명 규칙
/* 변수 선언 방법
* int pay; 변수타입(자료형) 변수이름;
* 같은 타입의 변수를 선언할 때는 한꺼번에 선언할 수 있음 e.g. int pay, day, time; -> 가독성이 좋지 않아(?) 권장하지는 않음
*
* 변수 선언 후 처음 값을 저장하는 것 = 초기화(initialization), 대입 -> 초기화 진행해서 넣어준 값 = 초기값
*/
// System.out.println(pay); // 다른 메소드 내에서 선언된 변수(local variable, 지역변수) 사용 불가능; 변수는 중괄호{}(scope, 영역, code block) 안에서 선언되고 사용됨
// Java에는 전역변수 없음; 전역변수처럼 사용할 수 있는 방법들은 여러 가지 있음 e.g. static으로 선언 등(project01 > first > HelloWorld > printMyName() 메소드)
/* 식별자(identifier): 클래스명, 메소드명, 변수명 등 사용자가 만들어서 이용하는 고유한 이름; 각자 구분되도록..
*
* 식별자 생성 시 꼭 지켜야 하는(안 지키면 안 만들어지는) 규칙
* 1. 대/소문자 구분 int Day != int day
* 2. 길이 제한은 없음
* 3. 문자, 숫자, _(under bar? underscore?), $를 식별자에 포함할 수 있음; @, ! 등 기타 특수기호 사용 불가
* 4. 문자, _, $로 시작할 수 있음 -> 숫자로는 시작할 수 없음
* 5. 공백은 포함할 수 없음
* 6. keywords(예약어)는 식별자로 사용할 수 없음
*
* 식별자 이름 규칙(개발자들의 약속/암묵적인 rules, coding convention)
* 1. 클래스/인터페이스 이름 규칙
* - 명사, 형용사를 서술적으로 연결해서 사용 -> 이름만 봐도 역할/용도를 한눈에 알 수 있도록
* - 첫글자는 대문자로 표기
* - 연결된 단어의 첫글자도 대문자로 표기 e.g. HelloWorld, MethodTest
* - 수업 진행을 위해 클래스명에 _ 사용하고 있으나, 클래스명에 _ 안 쓰는게 좋음
*
* 2. 변수 이름 규칙
* - 명사적 의미를 갖게 만듦
* - 첫글자를 소문자로 표기 + 연결된 단어의 첫글자는 대문자로 표기 e.g. phoneNumber, redApple
*
* 3. 메소드/메서드/method 이름 규칙
* - 동사적 의미를 갖게 만듦
* - 첫글자는 소문자로 표기 + 연결된 단어의 첫글자는 대문자로 표기
* - 메서드명 뒤에는 한 쌍의 괄호()가 붙음
* - 매서드명은 일반적으로 _ 사용하지 않음 e.g. calPay(), declareVariable(), join()
*
* 4. 상수 이름 규칙
* - 모든 문자를 대문자로 표기
* - 단어와 단어 사이는 _로 구분함 e.g. LOGIN_OK
*/
7교시: 자료형
논리형 + 숫자형 + 문자형 + 참조형
// 자료형 4가지
// 1. 논리형 자료형(논리값): 1byte
// 논리형 자료형에는 true, false 2가지가 존재함
// 형 변환 제외(불가능?)
boolean isTrue; // 변수 선언
isTrue = false; // 다음 줄에서 변수 초기화
boolean isFalse = true; // 변수 선언하면서 초기화 -> 강사님께서는 이 방법 사용을 권장하심
// 2. 숫자형 자료형
/* 2-1. 정수형
* 정수형에는 4가지 유형이 있음
* 정수형 예약어 byte, short, int, long형이 있고, int형 주로 사용
* 정수형은 10진수 뿐만 아니라 2진수, 8진수, 16진수 표현 가능
* 정수형의 기본형은 int이고, long형 사용할 때는 할당한 숫자 뒤에 "L"을 붙여야 함
*/
byte bNum = 5; // 1byte
short sNum = -6; // 2bytes
int iNum = 7; // 4bytes
long lNum = -8L; // 8bytes, long형 literal임을 알려주기 위해 뒤에 대/소문자 L(가독성을 위해 권장)/l 붙여줌
// 변수에 대입되는, 변하지 않는, 수정할 수 없는 값 = literal (!= 프로그래밍에서의 상수)
/* 2-2. 실수형
* 실수형에는 2가지 유형이 있음
* 실수형 예약어 float, double형이 있고, 주로 double형 사용
* float형 사용하려면 할당할 숫자 뒤에 f(또는 F) 붙여야 함
*/
float fNum = 25.678f; // 4bytes, 보통 소문자 f 붙여줌
double dNum = -7.894; // 8bytes
// 3. 문자형
char ch = 'a'; // 단일문자에는 반드시 홑따옴표를 넣음
// String은 클래스(Eclipse dark theme에서 청록색으로 표시됨), 참조형(크기는 4bytes)(o) 자료형(x)
// 4. 문자열형(String): 참조자료형 -> 주소를 담음
String str; // str에는 문자열이 저장된 주소값이 담김
str = "abc";
/* 1. 지금까지 9개의 자료형을 위와 같이 선언했고,
* 2. 9개의 값을 초기화 진행했음
* 3. 9개의 값이 제대로 들어갔는지 확인해보기
* 출력양식: "변수이름 : 변수값"; Run 클래스에서 실행
*/
8교시: 상수
// 상수 : 변하지 않는 수(수학에서의 상수), 값의 개념(x) 변경하지 않을 변수, 공간의 개념(o)
public void constant() {
int khNum; // khNum = 변수 -> 이 공간에 담는 값은 바꿀 수 있음
khNum = 1; // khNum 메모리(RAM) 공간에 담는 값이 1이었다가,
System.out.println(khNum);
khNum = 2; // khNum 메모리(RAM) 공간에 담는 값이 2가 될 수도 있음
System.out.println(khNum);
// 상수
// 프로그래밍에서의 상수는 변하지 않는 값을 담을 공간; 한 번 초기화하면 값 변화시키지 않음
// e.g. 1760년부터 올해까지의 연 수(올해 연도 - 1760)를 계산하는 메소드 -> 1760은 고정인 값/변하지 않음, 올해 값은 이 메소드를 사용하는 해마다 변동..
// 표현법 : final 자료형 상수이름;
final int START_YEAR = 1760;
double PI = 3.14; // 원주율 값은 변하지 않음
System.out.println(START_YEAR);
System.out.println(PI);
}
소감
- 본격적인 첫번째 수업날이었다. 혼자 공부할 때와 달리 하루에 많은 것을 배울 수 있어서 감사하고 좋다!
- 강사님께서 주요 내용을 주석으로 필기하면서 진도를 나가시는데, 수업에 집중하는 데에도 좋고, 복습하는 데에도 유용한 것 같다.
- 오늘 배운 내용 한 번 쭈~욱 읽어보고 자야지!
'back-end dev > Java' 카테고리의 다른 글
[KH정보교육원] 4일차_강제형변환, 연산자 (0) | 2021.11.07 |
---|---|
[KH정보교육원] 3일차_출력문, 입력, 형변환 (0) | 2021.11.07 |
[KH정보교육원] 1일차_환경 설정 (0) | 2021.11.07 |
[Java] 입력받은 월의 최대 일수 출력하기 (0) | 2021.08.07 |
[Java] 두 수의 합 구하기 (0) | 2021.08.07 |