일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 체크인미팅
- 스프링부트
- 42서울
- UNIDEV
- 온라인테스트
- 전국대학생게임개발동아리연합회
- 도커
- 인프라
- 티스토리챌린지
- Developer
- AWS
- 게임개발동아리
- UNICON2023
- 자바개발자
- CICD
- 인디게임
- 라피신
- 생활코딩
- 위키북스
- 스프링
- 프리티어
- 백엔드개발자
- 배포
- 오블완
- EC2
- 개발공부
- 백엔드
- UNICON
- RDS
- 프로그래밍
- Today
- Total
Hyun's Wonderwall
[Java] 생활코딩 Java 입문 수업 강의 메모 (완강) 본문
생활코딩 Java 입문 수업
- 수강 기간: 2023.1.20~2023.2.03 (1/20, 1/25, 2/3)
- 강의 링크: https://opentutorials.org/course/3930
[01. 수업소개]
- 뒤로 갈수록 덜 중요한 게 나온다. 빨리 그만두는 것 = 졸업하는 것!
[02. 자바 설치]
- 온라인 편집기를 개발환경으로 이용하기: jdoodle https://www.jdoodle.com/online-java-compiler/
jdk 1.8 설치 완료
[03. 자바 개발환경 셋팅하기 - 이클립스]
- 이클립스 설치 완료
[04. 자바 애플리케이션 실행]
- Hello World 출력
- 이클립스 run 단축키: ctrl + F11
[05. 자바 기술의 응용]
(1) 자바로 데스크탑 앱 만들기
레이아웃 창 크기 컨트롤 할 수 있다.
GUI: Graphic Use Interface
(2) 자바로 사물 제어하기
IoT(사물인터넷): Internet of Things
라즈베리파이: 교육용으로 만들어진 사물인터넷 컴퓨터.
라즈베리파이 구성: 모니터 단자, 전원 단자, 키보드&마우스 단자, GPIO (LED 연결함)
자바를 이용해 “n번핀에 전류를 흐르게 해!” 라고 할 수 있다 → 자동화 가능해짐
LED를 Hello 모스 부호로 불을 켜볼 것이다
pin.high(): 불 켜짐 / pin.low(): 불 꺼짐
Thread.sleep(SHORT_INTERVAL) 또는 Thread.sleep(LONG_INTERVAL): 시간 컨트롤
(3) 자바로 안드로이드 앱 만들기
- android development documentation
- android studio download
[06. 데이터와 연산]
(1) 데이터 타입 - 숫자, 문자
(2) 데이터 타입 - 출력
System.out.println() : 자바의 기본 출력 메소드 (단축키: sysout, sout)
괄호 안에 - 숫자 입력 : Number / “ ” : String / ‘ ‘ : Char
+) 위 메소드에 대한 설명: https://sangwoo0727.github.io/java/JAVA-sysout/
+) 다른 출력 메소드들 print, printf: https://developer-yeony.tistory.com/74
+) 현업에선 println 사용 지양: https://velog.io/@destiny1616/System.out.println-사용을-자제해야-하는-이유
+) 함수와 메소드의 차이: https://zeddios.tistory.com/233
(3) 숫자와 연산 - 클래스 생성, Operator, Math.
[java 파일 쉽게 만들기]
프로젝트 우클릭→New→Class→Name에 소스코드명 입력 ”Which method stubs would you like to create?”에서 ✅ public static void main(String[] args) 체크
⇒ 메소드 생성
[Operator 연산자] + : 덧셈, - : 뺄셈, * : 곱셈, / : 나눗셈
[Operand 피연산자] 항, 연산 대상
[Math 클래스] Math.PI : 원주율 Math.floor() : 내림 Math.ceil() : 올림
//Number.java
public class Number {
public static void main(String[] args) {
//연산자: Operator
System.out.println(6+2); //8
System.out.println(6-2); //4
System.out.println(6*2); //12
System.out.println(6/2); //3
System.out.println(Math.PI); //3.141592653589793
System.out.println(Math.floor(Math.PI)); //3.0 내림
System.out.println(Math.ceil(Math.PI)); //4.0 올림
}
}
(4) 문자열 표현 - "", \n, \"
- 문자열 줄바꿈: \n
- 문자열 따옴표 출력: \" (이런걸 escape sequence라고 한다.)
- 문자열은 "" 을 사용
(5) 문자열 다루기 - 문자열 치환 replace()
- replace() 메소드로 문자열 값 쉽게 바꾸기
- 형태: replace([기존문자], [바꿀문자])
//StringOperation.java
public class StringOperation {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println("Hello, [[name]] ... bye".replace("[[name]]", "Lee"));
//Hello, Lee ... bye 출력
String a = "Hello";
a= a.replace("el", "a");
System.out.println(a);
//Halo 출력
}
}
[07. 작심삼일 공학]
언제든지 공부를 그만하고 일을 하고, 언제든지 일을 그만하고 공부를 하라 (=파이팅!)
[08. 변수]
(1) 변수의 정의 - datatype
변수: 데이터를 담는 곳에 붙이는 이름, 값이 변할 수 있다.
자바는 변수를 만들 때 어떤 datatype이 들어가는지 지정해주어야 한다. (c언어처럼)
int: 정수형, double: 실수형, string: 문자열
(2) 변수의 효용 - System.out.println(“문자열”+변수+”문자열”);
값을 바꿔야 할 때 좋다
//Letter.java
public class Letter {
public static void main(String[] args) {
String firstname = "Gildong";
String lastname = "Hong";
System.out.println("Hello, "+firstname+" "+lastname+" ... (content) ... bye");
//Hello, Gildong Hong ... (content) ... bye
double VAT = 10.0;
System.out.println(VAT);
//10.0
}
}
(3) 데이터 타입의 변환 (casting) - (타입) 피연산자
형변환 Type Conversion: 객체의 datatype을 다른 datatype으로 convert한다.
형변환의 종류: Promotion, Casting
- Promotion: 묵시적 형변환, 자동 형변환 (=Automatic Type Conversion, Implicit Type Casting)
- Casting: 명시적 형변환, 강제 형변환 (=Explicit Type Casting) (): cast operator, 형변환 연산자 ex. int a = (int)1.1;
+) 참고: https://inpa.tistory.com/entry/JAVA-☕-타입-형변환-종류-방법-💯-총정리
- 변수 여러개 출력은 (a+” “+b) 이런 식으로
- 정수를 문자열로: String str1 = Integer.toString(i); //i는 정수, st1은 변수명
- getclass() 메소드: 객체가 속하는 클래스를 확인할 수 있는 메소드
//Casting.java
public class Casting {
public static void main(String[] args) {
double a = 1.1;
double b = 1; //자동적으로 정수인 1이 실수인 1.0으로 converting된다
//데이터 타입 바꿔도 데이터 손실 없으므로
double b2 = (double) 1; //casting으로 명시적으로 데이터타입 바꿔주는 방법
//System.out.println(a);
//System.out.println(b);
//System.out.println(b2);
System.out.println(a+"\\n"+b+"\\n"+b2+"\\n");
//int c = 1.1; //1.1을 정수형으로 바꾸면 데이터 손실이 일어나므로 error 발생
double d = 1.1; //data type을 double로 바꾼다
int e = (int) 1.1; //casting
System.out.println(d+", "+e+"\\n");
//1 to string
//String str1 = Integer.toString(i)
String f = Integer.toString(1);
System.out.println(1+10);
System.out.println(f+10);
//getclass() 메소드: 객체가 속하는 클래스를 확인할 수 있는 메소드
System.out.println(f.getClass());
}
}
[09. 프로그래밍이란 무엇인가?]
(1) 프로그래밍이란 무엇인가 - 목표: 자동화
- 프로그램: 시간의 순서에 따라 진행되는 것, 실행되는 것.
(2) 프로그램 만들기 - 소스 코드 내려받아 사용하기
- 다른 사람의 코드 디렉토리를 내 프로젝트에 추가: 폴더 전체를 프로젝트에 복사 및 붙여넣기 (copy files and folders)
(3) IOT 프로그램 만들기 - package 패키지명; , import 패키지명.클래스명;
//OkJavaGoInHome.java & 패키지 org.opentutorials.iot
- Package 패키지: 클래스의 묶음. (=디렉토리=폴더)
- 클래스들을 구분지어 체계적으로 관리하기 위해 사용된다. 클래스를 유일하게 만들어주는 식별자로, 클래스의 일부분이다. 패키지와 클래스는 .를 사용해서 구분한다.
- package 키워드는 이 파일이 어떤 패키지의 파일인지를 알려주는 역할을 한다.
어떤 패키지에서 클래스를 생성하면 package 패키지명;이 자동으로 삽입된다.
package 상위패키지명.하위패키지명;
*패키지 이름 규칙: 모두 소문자로 작성하는 것이 관례이다. 숫자 시작x, java로 시작x, int 등 자바 예약어x.
*회사의 경우 흔히 회사의 도메인 이름 역순으로 패키지 이름을 짓는다.
- Import 임포트: 다른 패키지의 클래스를 사용할 때 import 명령어를 사용해 클래스를 호출하면, (속한 패키지 정보 작성 없이) 클래스를 이름으로 사용할 수 있다.
import 상위패키지명.하위패키지명.클래스명;
ex. 1) import 사용 전: org.opentutorials.iot.Elevator myElevator = new org.opentutorials.iot.Elevator(id);
2) import org.opentutorials.iot.Elevator; 사용 후: Elevator myElevator = new Elevator(id);
Elevator.java
* package org.opentutorials.iot;
package org.opentutorials.iot;
public class Elevator {
String _id;
public Elevator(String id) {
this._id = id;
}
public Boolean callForUp(int stopFloor) {
System.out.println(this._id+" → Elevator callForUp stopFloor : "+stopFloor);
return true;
}
public Boolean callForDown(int stopFloor) {
System.out.println(this._id+" → Elevator callForDown : "+stopFloor);
return true;
}
}
OkJavaGoInHome.java
* org.opentutorials.iot 패키지의 클래스들을 임포트했다
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;
public class OkJavaGoInHome {
public static void main(String[] args) {
String id = "JAVA APT 507";
// Elevator call
//org.opentutorials.iot.Elevator 쓰는 것 대신 import
Elevator myElevator = new Elevator(id);
myElevator.callForUp(1); //1층으로 엘리베이터 보내기
// Security off
Security mySecurity = new Security(id);
mySecurity.off(); //괄호 붙어있는 명령은 '메소드'
// Light on
Lighting hallLamp = new Lighting(id+" / hallLamp");
hallLamp.on();
Lighting floorLamp = new Lighting(id+" / floorLamp");
floorLamp.on();
}
}
[10. 디버거]
벌레 아이콘 클릭(’Debug 파일명’) → 디버깅 시작
오른쪽 끝의 Perspective: Java / Debug (템플릿 기능, switch 가능)
Step Over(F6): 명령 한 줄씩 실행 (하나하나 체크)
디버깅 중에 한줄씩 가리키는 화살표: Debug Current Instruction Pointer
줄 왼쪽 더블클릭: Line Breakpoint
* Resume: breakpoints에만 멈춤
* Variables 패널: 변수 확인
* Step Into: 메소드 안으로 들어감 (다른 파일로 갈수도)
* Step Return: 메소드 바깥으로 나감 (기존 파일로)
* 🟥 Terminate: 디버그 끝
[11. 입력과 출력]
(1) 입력과 출력 - swing 처음 등장, import 사용법, 메소드 개념, JOPitionPane.showInputDialog()
INPUT → PROGRAM → OUTPUT
INPUT을 어떻게 주냐? →다양한 방법으로 가능
하고 싶은 것_ 프로그램 수정 시 팝업이 뜨고 거기에 텍스트 입력할 수 있으면 좋겠다.
구글에 “java popup input text swing” 검색
String path = JOPitionPane.showInputDialog(”Enter a path”);
자바의 Swing
String id = JOptionPane.showInputDialog("Enter a ID");
import javax.swing.JOptionPane;
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;
import org.opentutorials.iot.DimmingLights;
public class OkJavaGoInHomeInput {
public static void main(String[] args) {
String id = JOptionPane.showInputDialog("Enter a ID");
String bright = JOptionPane.showInputDialog("Enter a Bright Level");
// Elevator call
//org.opentutorials.iot.Elevator 쓰는 것 대신 import
Elevator myElevator = new Elevator(id);
myElevator.callForUp(1); //1층으로 엘리베이터 보내기
// Security off
Security mySecurity = new Security(id);
mySecurity.off(); //괄호 붙어있는 명령은 '메소드'
// Light on
Lighting hallLamp = new Lighting(id+" / hallLamp");
hallLamp.on();
Lighting floorLamp = new Lighting(id+" / floorLamp");
floorLamp.on();
DimmingLights moodLamp = new DimmingLights(id+"mood");
moodLamp.setBright(Double.parseDouble(bright));
moodLamp.on();
}
}
(2) 입력과 출력 - 이클립스의 Run Configurations 사용법
argument: 명령어, parameter: 매개변수, 인자
명령어로 실행되는 프로그램에 파라미터를 통해서 인자를 전달하는 방식을 배워본다
Run → Run Configurations 클릭시 자바 어플리케이션 리스트가 쭉 나온다
프로젝트, 메인 클래스 구조 확인
arguments 탭에서 따옴표(””)로 묶어 입력값 적어주기, 각각의 입력값은 띄어쓰기로 구분
apply 저장 run 실행
자바 어플리케이션의 이름을 수정 가능 - 입력값이 뭔지 적어놓고 싶다면 어플리케이션 이름을 클래스 - '값' '값' 이렇게 적어둘 수 있다
- JOptionPane.showInputDialog() : 입력창을 띄워서 입력값을 받아서 사용
- args[] : Run Configuration에서 입력해둔 값을 args 배열에 넣어서 사용 바로 args[0], args[1] ...
다른 값도 이것저것 실행하고 싶으면
어플리케이션 복제하고 입력값 바꾸고 run
자주사용하는 버튼은 목록에 추가 가능 (organize favorites 즐겨찾기)
String id = args[0] //JOptionPane.showInputDialog("Enter a ID");
String bright = args[1] //JOptionPane.showInputDialog("Enter a Bright Level");
[12. 내 힘으로 컴파일 (직접 컴파일하고 실행하기)]
(1) 소개 - 배울 것들
[1] .java를 .class로 바꾸기
[2] .class 실행
[3] 입력값에 따라 다르게 동작하는 출력값 만들기
(2) 실행환경 - path 환경변수
환경변수 설정하기: 내 컴퓨터>속성>고급 시스템 속성>환경변수 사용자 변수 또는 시스템 변수 편집 가능
cmd에서 명령 내리기: 윈도우+r 키 누르고 cmd 열기
javac로 컴파일 가능: cmd 창에 입력시 사용법이 나온다. Program Files>Java>jdk>bin
java 입력시 java.exe 실행된다: 현재 위치중인 있는 디렉토리에 없으면 path 환경변수에서 찾는다. path 환경변수에 입력해 줬기 때문에 가능
+덧붙임: 자바 프로젝트에서 bin 디렉토리: src 안에 있는 .java 파일들이 .class 파일로 컴파일된 것들이 저장되는 곳
(3) 컴파일과 실행하기 - 명령어 cd, dir, javac, java
- cd: Change Directory (cd C:\Users\SAMSUNG\eclipse-workspace\Programming\src)
- dir: .java 파일 확인 (dir)
- javac: 컴파일 (javac 파일.java)
- java 클래스명: 클래스 실행 (‘Program’이라는 클래스 찾아서 실행, 코드대로 1, 2, 3이 출력되었다)
(4) 라이브러리 이용 - 외부 디렉토리의 클래스 사용하는 경우 - javac -cp “.;lib” 파일.java 또는 클래스명
javac -cp ".;lib" OkJavaGoInHome.java //해당 자바 파일이 필요로 하는 클래스 파일들 자동으로 컴파일해서 생성
java -cp ".;lib" OkJavaGoInHome 하면 lib 디렉토리와 그 이하까지도 찾아서 프로그램 실행. 이렇게 해주자
java OkJavaGoInHome //main 못찾았다고 실행되지 x (elevator 클래스가 lib 폴더 안에 있기 때문에)
java -cp "lib" OkJavaGoInHome //lib 디렉토리에서만 찾는다
(5) 입력과 출력 - 이클립스 사용없이, 입력값을 줘서 출력
* 한글 주석 때문에 오류나서 실습하지는 못했다..!
javac OkJavaGoInHomeInput.java
java OkJavaGoInHomeInput 하면 오류 (args 때문에)
java OkJavaGoInHomeInput "Java APT 507" 15.0
java OkJavaGoInHomeInput "Pusan APT 507" 30.0
[13. 자바 문서 보는 법]
(1) API vs UI
자바는 우리에게 여러 부품들을 제공해준다 (기본 내장부품: “기본 라이브러리”)
이것들을 조작하는 방법: API (Application Programming Interface)
자바가 제공하는 기본 라이브러리를 사용하는 방법 즉 API 사용하는 방법 배우자
(프로그램은 ‘시간’에, 애플리케이션은 ‘응용’에 방점이 찍혀있는 표현이다.)
- 사람이 프로그램 조작하기 위해 사용하는 조작 장치: UI
- 프로그램이 프로그램에게 알려주는 조작 장치: API
[14. 나의 앱 만들기 1], [15. 나의 앱 만들기 2]는 실습
[14. 나의 앱 만들기 1]
기본 기능 구현->변수도입->입력값도입
string을 double로 바꿀 경우
double valueOfSupply = Double.parseDouble(args[0]);
[15. 나의 앱 만들기 2]
(1) OT
(2) 제어문(Flow control statements)
- 제어문에는 조건문과 반복문이 있다
if(income > 10000.0) {
dividend1 = income*0.5;
dividend2 = income*0.3;
dividend3 = income*0.2;
}
else {
dividend1 = income*1;
dividend2 = income*0;
dividend3 = income*0;
}
(3) 배열
double[] dividendRates = new double[3];
dividendRates[0] = 0.5;
dividendRates[1] = 0.3;
dividendRates[2] = 0.2;
double dividend1 = income*dividendRates[0];
double dividend2 = income*dividendRates[1];
double dividend3 = income*dividendRates[2];
(4) 반복문
double[] dividendRates = new double[3];
dividendRates[0] = 0.5;
dividendRates[1] = 0.3;
dividendRates[2] = 0.2;
int i=0;
while(i < dividendRates.length) {
System.out.println("Dividend: "+(income*dividendRates[i]));
i=i+1;
}
(5) 메소드
메소드는 서로 연관된 코드를 그룹핑하여 이름 붙인 것
public static double getIncome(){
return 1;
}
public class AccountingMethodApp {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void main(String[] args) {
valueOfSupply = 10000.0;
vatRate = 0.1;
expenseRate = 0.3;
print();
}
public static void print() {
System.out.println("Value of supply: "+valueOfSupply);
System.out.println("VAT: "+getVAT());
System.out.println("Total: "+getTotal());
System.out.println("Expense: "+getExpense());
System.out.println("Income: "+ getIncome());
System.out.println("Dividend: "+getDividend1());
System.out.println("Dividend: "+getDividend2());
System.out.println("Dividend: "+getDividend3());
}
public static double getDividend1() {
return getIncome()*0.5;
}
public static double getDividend2() {
return getIncome()*0.3;
}
public static double getDividend3() {
return getIncome()*0.2;
}
public static double getIncome() {
return valueOfSupply-getIncome();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply*vatRate;
}
}
(6) 클래스
오브젝트=객체
클래스는 서로 연관된 변수, 메소드를 그룹핑한 것이다
클래스.변수
클래스.메소드()
소속관계 명확히
class Accounting{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void print() {
System.out.println("Value of supply: "+valueOfSupply);
System.out.println("VAT: "+getVAT());
System.out.println("Total: "+getTotal());
System.out.println("Expense: "+getExpense());
System.out.println("Income: "+ getIncome());
System.out.println("Dividend: "+getDividend1());
System.out.println("Dividend: "+getDividend2());
System.out.println("Dividend: "+getDividend3());
}
public static double getDividend1() {
return getIncome()*0.5;
}
public static double getDividend2() {
return getIncome()*0.3;
}
public static double getDividend3() {
return getIncome()*0.2;
}
public static double getIncome() {
return valueOfSupply-getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply*vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();
}
}
(7) 인스턴스
인스턴스는 하나의 클래스를 복제해서 - 서로 다른 데이터의 값을 가지고 서로 같은 메소드를 가진 복제본으로 만드는 것이다
인스턴스를 사용할 경우 static이면 안된다.
class Accounting{
public double valueOfSupply;
public double vatRate;
public double expenseRate;
public void print() {
//...
}
//...
}
public class AccountingInstanceApp {
public static void main(String[] args) {
// instance
Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();
Accounting a2 = new Accounting();
a2.valueOfSupply = 20000.0;
a2.vatRate = 0.05;
a2.expenseRate = 0.2;
a2.print();
}
}
[수업을 마치며]
나를 위한 프로그램,
나에게 필요하고 중요한 프로그램을 만들라
그것이 곧 보편적인 프로그램이 될 것이다!
'Study > Java, Spring' 카테고리의 다른 글
[백엔드] 스터디 - Spring Boot 어노테이션 몇가지 정리 (0) | 2023.05.15 |
---|---|
[백엔드] 스터디 2주차 - Java (4) 배열, 버블 정렬, Arrays 클래스, Random 클래스 (0) | 2023.04.03 |
[백엔드] 스터디 1주차 - Java (3) 연산자, 조건, 반복문 (0) | 2023.03.27 |
[백엔드] 스터디 1주차 - Java (2) 입출력, 변수, 자료형, 캐스팅 (0) | 2023.03.27 |
[백엔드] 스터디 1주차 - Java (1) 이론 (0) | 2023.03.27 |