D: 안에 workspace폴더 생성.
https://java.oracle.com에서 17버전 다운로드.
환경변수
JDK의 위치를 알려줘야 한다.
JAVA_HOME
C:\Program Files\Java\jdk-17
Path
C:\Program Files\Java\jdk-17\bin
path는 bin에게 걸어주어야 한다.
개똥이
개똥이의 속성 = %개똥이% => 010-1111-1111
%JAVA_HOME% => C:\Program Files\Java\jdk-17
window - cmd - path
자바는 대소문자 구별 (명령어는 소문자)
메소드( )
명령어들의 집합
자바는 public static void main(String[] args)
콘솔장치 (System) (자바는 콘솔 프로그램)
입력 : 키보드 , System.in
출력 : 화면, System.out
. 은 소속 개념 ~안에 있다
HelloTest.java - source file
↓ 컴파일
HelloTest.class
↓ 실행
그래서 JVM(자바가상머신)등장, (원래는 실행파일 HelloTest.exe 자바는 없음)
인터프리터 방식으로 실행함 (한줄씩 수행)
javac 파일명.확장자
한글이 깨져서 나와서 인코딩 실행하면서 class 파일 생성
javac HelloTest.java -encoding UTF-8
java 파일명 으로 실행
숫자 '문자'(1개) "문자열"
2 '2' "2"
'25' x "25" o
(1KB = 약 10^3 1024 byte)
컴파일 2진수 10진수 ASCii(아스키 코드)
'A' ---------------> 0100 0001 ---------------> 65
'B' ---------------> 0100 0011 ---------------> 66
'C' ---------------> 0100 0011 ---------------> 67
'a' ---------------> 0110 0001 ---------------> 97
5 ---------------> 0000 0101 ---------------> 5
'5' ---------------> 0000 0101 ---------------> 53
0 ---------------> 0000 0000 ---------------> 0
'0' ---------------> 0011 0000 ---------------> 48
그래서 'A'와 'B' 중에 'B'가 더 크다
"A"와 "B"의 값은 비교 불가 문자열은 아스키 코드 값이 없기 때문이다.
class HelloTest{
public static void main(String[] args){
System.out.println("안녕하세요");
System.out.println(2+5);
System.out.println('2' + '5');
System.out.println("2" + "5");
}
}
- 2진수 : 0,1 -> 2 = 10 3 = 11 (2진수로 바꾸고자 하는 수를 2로 나누면)
- 8진수 : 0~7 -> 8 = 10
- 10진수 : 0~9 -> 10
- 16진수 : 0~8, 9, a(10), b(11), c(12), d(13), e(14), f(15) -> 16 =
16진수 표현
ex) int a = 10; 이면
문자 'a'+ 3 = 100
숫자 0xa + 3 = 13 0xd로 표현가능
문자열 "a" + 3 = a3(문자열은 아스키 값이 없음 그냥 결합임)
변수 a + 3 = 13
'A' + 32 = 'a'
대문자 <-> 소문자 ± 32
숫자 <-> 문자 ± 48
2 -> "2" = 2 + ""
"2" -> 2 = Integer.parseInt("2")
window properties로 가서 설정하고 시작
처음에 Java Project -> package -> File을 만들어야 함
체크 해체
Variable(변수)
[형식]
자료형 변수명;
논리형 boolean - true, false
문자형 char (2byte - uni code)
정수형 byte - (1byte) : -128 ~ +127
short - (2byte 16bit) : 32768 ~ -32767
int - (4byte) : -21억 ~ +21억
long - (8byte 64bit)
실수형
float (4byte)
double (8yte)
package class_;
public class Variable {
static int b;
static double c;
int d;
// main 전에 선언은 가능하지만 명령은 불가
public static void main(String[] args) {
//지역변수 (local variable)
short a =65; //0100 0001
int b = 65;
System.out.println("지역변수 a = "+ a);
System.out.println("지역변수 b = "+ b);
System.out.println("필드 b = " + Variable.b);
System.out.println("필드 c = " + c);
//System.out.println("필드 c = " + new Variable().d);
Variable v = new Variable(); // 생성
System.out.println("객체 v = " + v);
System.out.println("필드 c = " + v.d);
}
}
모두 대문자로 시작
Integer
String
System
호출된 메소드는 반드시 호출한 곳으로 되돌아 온다.
명령어들의 집합체
[형식]
메소드의 구현
return형 메소드명(인수형 인수, 인수형 인수, ....){
}
객체명.메소드명(값1, 값2, 값3,.....)
클래스명.메소드명(값1, 값2, 값3,.....) : static인 경우
자바의 모습
package class_;
public class Method01 {
public static void disp() { // 구현
System.out.println("static method...");
}
public void output() { // 구현
System.out.println("non-static method...");
}
public static void main(String[] args) {
Method01.disp(); // Method01 클래스 안에 있는 disp( )함수 호출
Method01 m = new Method01(); // static이 아닌 output()함수의 호출
m.output();
}
}
package class_;
public class Method02 {
public static void main(String[] args) {
Method02 m = new Method02();
int s1 = m.sum(25, 36); // 호출
System.out.println("합 = "+s1);
int s2 = m.sub(25, 36); // 호출
System.out.println("차 = "+s2);
int s3 = m.mul(25, 36); // 호출
System.out.println("곱 = "+s3);
double s4 = m.div(25, 36); // 호출
System.out.println("몫 = "+s4);
}
public int sum(int x, int y){ // 구현
return x+y;
}
public int sub(int x, int y){ // 구현
return x-y;
}
public int mul(int x, int y){ // 구현
return x*y;
}
public double div(double x, double y){ // 구현
return x/y ;
}
}
아래처럼 바꿀 수도 있음
형식
정수형 %d
실수형 %f
문자형 %c
문자열 %s
실수형으로 5자리만 출력하는데 소숫점 3자리까지만 출력 => %5.3f
다 됐고 소수점 3자리까지 보여줘 .3f
System.out.println("몫 = "+ String.format("%.3f", s4));
return (double)x/y ; // 강제 형변환(Cast 연산)
객체지향 (현실세계의 모든 것)을 문서화
ex) 라면자판기
속성(데이터) 기능(메소드)
라면, 젓가락, 물이 필요 물의 양, 온도 올/내,
ex) 자동차
문, 좌석, 엔진, 바퀴 달린다, 속도, 멈춘다.
package class_;
class Person {
String name;
int age;
}
//--------------------------
public class PersonMain {
public static void main(String[] args) {
Person aa = new Person(); // aa = 객체
aa.name = "문이빈";
aa.age = 28;
System.out.println("객체 aa = " + aa);
System.out.println(aa.name +"\t"+aa.age);
}
}
자바 파일은 한개
클래스 파일은 2개 생김
private
package class_;
class Person {
private String name;
private int age;
public void setName(String n){
name = n;
}
// 중간자 - 문이빈이 name에 들어가지 못하니까 문이빈을 n에게 n이 name에게 준다.
public void setAge(int a) {
age = a;
}
// return 값없으면 public void
public String getName(){
return name;
}
public int getAge(){
return age;
}
}
//--------------------------
public class PersonMain {
public static void main(String[] args) {
Person aa = new Person(); // aa = 객체
aa.setName("문이빈");
aa.setAge(28);
System.out.println("객체 aa = " + aa);
System.out.println(aa.getName() +"\t"+aa.getAge());
}
}
aa에 있는 setName에 홍길동을 n에 보내고 name이 n 이라고 받고 호출을 함.
package class_;
class Person {
private String name;
private int age;
public void setName(String n){
name = n; // 중간자 - 문이빈이 name에 들어가지 못하니까 문이빈을 n에게 n이 name에게 준다.
}
public void setAge(int a) { // return 값이 없으면 public void
age = a;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setData(String n, int a) {
name = n;
age = a;
}
}
//--------------------------
public class PersonMain {
public static void main(String[] args) {
Person aa = new Person(); // aa = 객체
aa.setName("문이빈");
aa.setAge(28);
System.out.println("객체 aa = " + aa);
System.out.println(aa.getName() +"\t"+aa.getAge());
System.out.println();
Person bb = new Person();
bb.setName("문우빈");
bb.setAge(21);
System.out.println("객체 bb = " + bb);
System.out.println(bb.getName() +"\t"+bb.getAge());
System.out.println();
Person cc = new Person();
cc.setData("코난", 35);
System.out.println("객체 cc = " + cc);
System.out.println(cc.getName() +"\t"+cc.getAge());
System.out.println();
}
}
주소도 다 다름.
추가적으로 작성함.
public void setData() {}
Person dd = new Person();
dd.setData();
System.out.println("객체 dd = " + dd);
System.out.println(dd.getName() +"\t"+dd.getAge());
System.out.println();
null값 나옴
클래스 밑에 애들은 필드라고 많이 부르며 초기화가 끝난애들이다...? 값은 null이 나옴
Overload (쌍둥이)
public void setData(String n, int a) {
name = n;
age = a;
public void setData() {}
둘은 생긴건 다르지만 성격이 다름
ex)
class AA{
public void sub(int x){}
public void sub(int x, int y){}
public void sub(char x){}
public int sub(int x){}
public void sub(String x){}
}
d여기서 1,4번이 다른거임 리턴값이 다른것 이므로 다른 메소드 이다.
폴더에 들어간 것을 확인
gitHub에 올라간 것을 확인
복습 완료
(1) 브랜치(Branch) - 가지치기
(2) 브랜치가 필요한 경우
(3) 머지(Merge)
(3) 명령어
* 사용중인 것
무엇이 있는지 확인
index.html이 그대로 있는 것을 확인할 수 있음
먼저 main로 포인터를 옮긴 후, main에 브랜치를 머지한다.
수정함
git log ) commit 한 내용 확인 -> 1은 main
checkout으로 main으로 돌아와서 확인해보면 commit하여 GitHub에 올라가있는 파일을 화인할 수 있다.
git merge로 main으로 병합하여 준다.
삭제하고 branch가 있는지 확인함.
그리고
만약
init 저장소로 보내자
저장소를 만들게 되면 기본 브랜치는 'main' 브랜치 이다.
package class_;
class SungJuk {
private String name;
int kor;
int eng;
int math;
int tot;
double avg;
String grade;
public void setData(String name, int kor, int eng, int math) {
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
public void calcTot () {
tot = kor + eng + math;
}
public void calcAvg () {
avg = (double)tot / 3;
}
public void calcGrade () {
if(avg >= 90) {
grade = "A";
}else if(avg >= 80) {
grade = "B";
}else if(avg >= 70) {
grade = "C";
}else if(avg >= 60) {
grade = "D";
}else {
grade ="F";
}
}
public String getName() {
return name;
}
public int getKor() {
return kor;
}
public int getEng() {
return eng;
}
public int getMath() {
return math;
}
public int getTot() {
return tot;
}
public double getAvg() {
return avg;
}
public String getGrade() {
return grade;
}
}
public class SungJukMain {
public static void main(String[] args) {
SungJuk a = new SungJuk();
a.setData("홍길동",95,84,78);
a.calcTot();
a.calcAvg();
a.calcGrade();
System.out.println("이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.print(a.getName() + "\t");
System.out.print(a.getKor() + "\t");
System.out.print(a.getEng() + "\t");
System.out.print(a.getMath() + "\t");
System.out.print(a.getTot() + "\t");
System.out.printf("%.3f\t", a.getAvg());
System.out.println(a.getGrade());
}
}
20분 동안 오류를 잡았는데 파일의 이름과 class이름의 일치 문제였다
-> 클래스가 2개여서 main쪽 class 이름을 사용해야 한다.
아주 유용한 정보네요!