초록꼬마의 devlog
article thumbnail

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);
}

 

소감

- 본격적인 첫번째 수업날이었다. 혼자 공부할 때와 달리 하루에 많은 것을 배울 수 있어서 감사하고 좋다!

- 강사님께서 주요 내용을 주석으로 필기하면서 진도를 나가시는데, 수업에 집중하는 데에도 좋고, 복습하는 데에도 유용한 것 같다.

- 오늘 배운 내용 한 번 쭈~욱 읽어보고 자야지!