-
221207 - 자바(개요, 변수, 연산자, 조건문과 반복문)스타터스 백엔드 3기 2022. 12. 7. 17:35
하루입니다.
chap2 - Hello, MaxMinTest,VariableTest / chap3 - Operator, ScoreTest, SwitchCaseTest, test1, test2. test3
1. 자바의 역사
2. 자바의 변수, 연산자, 조건문
프로그래밍 언어란?
- 변수, 연산자, 함수, 반복문을 가졌다
자바 프로그래밍 언어란?
- 웹과 독립적으로 동작하는 프로그램이다.
- 웹서버에서 동작하는 프로그램도 가능하다.
- DB 연동 프로그램도 가능하다.
- 풍부한 자바 라이브러리를 제공한다.
- 객체지향언어이다.
- C언어 유사 문법이다
- 플랫폼 독립적이다. => 자바소스파일은 어느 os에서나 실행된다.
- 1995년에 태어났다 (나보다 나이가 많다)
- 1995년에는 컴퓨터에서 키보드 입력 환경(CUI)만 가능했다. 그러다 MS가 OS를 만들어서 아이콘을 클릭하면 이동 가능한 GUI를 만들었다. MS에서 만든 대표적 언어가 C C++ C#이다. 이 언어들은 운영체제에 따라 프로그램 소스도 다르고, 실행 방법도 달랐다. 만약 mac에서 소스 파일 만들고 windows에서 실행하려고 하면 오류가 발생한다. 하드웨어와 운영체제는 컴퓨터의 플랫폼이라고 하는데, C C++ C#은 플랫폼 종속적이다. 극단적으로 보자면 리눅스에서 쓸래 -> 아니다 윈도우에서 쓸래 라고 하면 프로그램을 처음부터 다시 짜야 할 수도 있다.
- 종속이 불편하다. SUN 이라는 회사가 생긴다. 이 회사는 java를 만든다. 이 언어는 C언어를 모태로 하며, 플랫폼 독립적이다. 맥에서 만들고도 윈도우에서 실행할 수 있다. MS의 독주 막고 플랫폼의 다양성을 넓혔다.
- 오라클이 SUN을 합병하며 자바, 오라클, mysql도 오라클이 관리하게 된다.
- mysql에 라이선스를 붙였다. mysql개발자 몇 명이 빠져나와서 mariaDB를 만들었다.
html, css, js는
1. 소스파일(.html, .css, .js)을 만들고
2. 실행할 때 문장의 순서에 따라 결과를 주는 형태이다.
자바는 세 번의 실행 순서가 필요하다.
1. 소스파일(.java)을 만든다.
: 사람이 이해할 수 있는 문법으로 작성된다.
: 컴퓨터는 이해 불가하다. 0과 1밖에 모른다.
2. 컴파일(.class)한다.
: 자바 문법을 컴퓨터가 이해할 수 있는 문법으로 바꾼다.
3. 실행한다.
자바 실행 순서 따라해보기
1단계 : 메모장 코딩. 메모장이 편집기이다.
2단계 : 번역 명령어 사용 : 이미 jdk 안에 있다. cmd창에서 실행한다.
javac 클래스명.java
클래스명.class 자동생성
3단계 : java Hello
자바 프로그램 실행된다!
C:\Users\user>cd c:\sba
c:\sba>javac Hello.java2022-12-07 오전 09:49 418 Hello.class
2022-12-07 오전 09:45 102 Hello.javac:\sba>java Hello
Hello 자바!이 과정을 편하게 하기 위해 이클립스를 사용한다. 스프링 특화 이클립스는 STS라고 한다.
수업 말미에는 aws 프로젝트를 만든다. 배포한다. 리눅스 환경이면 cmd로 직접 명령어 사용해서 수행해야 한다 ... ?
이클립스에서 자바 프로그램 만들기
자바의 프로그램 형태
1. java application (2주)
독립적으로 실행 가능하다.
public static void main(String[] args) { } 선언이 반드시 필요하다.
자바는 소스파일(우리가 적는다) - 컴파일(이클립스가 한다) - 실행(우리가 실행한다) - main메소드 내부 문장을 거친다.
2. servlet, jsp
웹서버 실행 가능하다, main 소드 선언하지않아도 된다.
3. android App
모바일기기 동작 프로그램이다.
- 이클립스에서 workspace를 workspace-java로 변경한다.
- java project 생성한다. Dynamic Web Project 아니다.
- Hello 클래스를 생성한다.

제너럴 - 워크스페이스 - 인코딩 확인 

chap2 프로젝트 생성!


Open Perspective 변경법
앞으로의 내용
1. 환경설정
2. 변수
3. 연산자
4. 조건문과 반복문
5. 배열
변수
변수란 프로그램에 필요한 데이터나 기능 수행의 결과물을 메모리에 저장한 값이다. (이름이다.)
메모리에 저장된 값(010101)은 우리가 이해하기 어렵고, 이에 이름을 준 것이다.
변수를 선언할 때 항상 데이터타입이 필요하다.
자바스크립트는 타입이 변경 가능하지만, 자바는 타입 변경 불가하다.
int i = 100; 이라고 하면, i = 200;은 가능하나 i = "string"; 은 불가하다.
변수(클래스, 메소드) 이름 규칙
~ 안 지키면 컴파일 오류 ~
영문자, 숫자, 다국어, _, $ 로 구성한다.
숫자 시작 불가능하다.
대소문자 구분한다.
자바 키워드 불가능하다.
이름 길이가 무제한이다.
~ 컴파일 오류는 안 나지만 약속 ~
클래스 이름은 명사를 사용하고, 첫문자는 대문자로 쓰자.
메소드는 동사를 사용하고, 첫문자는 소문자로 쓰자.
변수는 명사를 사용하고, 첫문자를 소문자로 쓰자.
두 단어 이상의 조합이면 camelCase를 사용하자.
- 8bit = 1byte
- 1000byte = 1kb
- ascii code : 아스키 코드, 1바이트, 유럽
- 유니코드 : 2바이트
- 자바는 유니코드 형태로 문자를 표현한다.
자바의 데이터타입
기본형 데이터타입 (8가지) 참조형 데이터타입 (? 가지) 논리값 boolean 문자열 String 단일문자 char 클래스 타입 정수 byte, short, int, long 인터페이스 타입 실수 float, double 열거 타입 배열 타입 논리값 boolean 1byte true / false 단일문자 char 2byte '가' 'a'
2^16 ===> 65536문자정수 byte 1byte [1bit 부호표현(0은 양수, 1은 음수][7bit 값 표현]
-2^7 ~2^7-1 ===> -128 ~ 127 정수short 2byte [1bit 부호표현(0은 양수, 1은 음수][7bit 값 표현]
-2^15 ~2^15-1 ===> 정수int 4byte [1bit 부호표현(0은 양수, 1은 음수][7bit 값 표현]
-2^31 ~2^31-1 ===> 정수long 8byte [1bit 부호표현(0은 양수, 1은 음수][7bit 값 표현]
-2^63 ~2^63-1 ===> 정수실수 float 4byte [1bit 부호표현(0은 양수, 1은 음수][지수부][가수부]
궁금하면 ieee754 검색해보기double 8byte [1bit 부호표현(0은 양수, 1은 음수][7bit 값 표현]
-2^7 ~2^7-1 ===> -128 ~ 127 정수System.out.println("byte 타입의 최대값 = " + Byte.MAX_VALUE); System.out.println("byte 타입의 최소값 = " + Byte.MIN_VALUE);
boolean
- true, false 두 가지 표현 가능하다.
- boolean t = true;
- boolean f = false;
char
- char c1 = 'a';
- char c2 = '0';
String
- String str1 = "hello";
- String str2 = "a":
- String str3 = "Have a Good day!";

데이터타입 : 숫자
int avg = (score + score2 + score3)/3; double avgDouble = (score + score2 + score3)/3.0; System.out.println("정수평균: " + avg); System.out.println("실수평균: " + avgDouble); System.out.println("실수 반올림: " + Math.round(avgDouble)); ---------------------------------------------------- 정수평균: 84 실수평균: 84.66666666666667 실수 반올림: 85- 변수 : 초기값을 다른 값으로 변경 가능
- 상수 : 읽기 전용이다. 변경할 수 없다.
- 절대불변의 진리값을 표현할 때 사용한다. (원주율 : 3.14)
- 여러 객체의 공유값을 표현할 때 사용한다.(1개값 공유)
- 자바 규칙의 생성값 표현(.MAX_VALUE)
literal 리터럴
왜 값을 리터럴이라고 부르는가 ...
100L, f, d ...
자바의 논리적 메모리 모델
stack(쌓는다, 더미) heap 변수 저장 영역
- 변수 선언 순서대로 메모리가 저장된다.
- 변수 크기를 정확히 알아야 한다.
- 변수 타입이 정적이다.참조형 변수값 저장 영역 104번지:b1=10
100번지:a1=10+ a1변수는 int니까 4바이트, 그래서 100번지 위 104번지에 b1을 쌓는다. int i = 10; //기본형
String s = "java:l // 저장문자열의 갯수 크기가 동적 변화한다. 지금은 4글자라 8바이크이다.
double d = 3.14;stack :변수 저장에 순서 있다 heap : 저장장소 랜덤하다 100:s = 500(4byte)
100:i = 10(4byte)500:"java" 
- stack 영역의 저장값이 리터럴이면 : 기본형 타입
- stack 영역의 저장값이 주소값이면 : 참조형 타입
- 저장 주소 프로그래밍으로 지정 불가
- (현재 변수 선언 블록) 수행 종료되면 stack 변수 자동 삭제
- heap 참조형 변수값 생성 / 자동 삭제. 위에서 500:"java"는 참조되는 곳이 없기에 사라져도 된다.
- 가비지 컬렉터가 자동으로 삭제해준다.
System.out.printf(" ");
- 출력인데 format과 함께
- %n \n 둘 다 줄바꿈 된다.
String location = "새싹 용산캠퍼스"; String title = "클라우드 기반 웹서버 과정"; int week = 3; System.out.printf("%d을 표현합니다. \n", 10); System.out.printf("%f을 표현합니다. \n", 3.14); System.out.printf("%c을 표현합니다.", 'a').println(); System.out.printf("%s을 표현합니다.", "name").println(); System.out.printf ("우리는 %s에서 %s수업을 %d주 동안 열심히 들어요. \n새나라의 아이들.", location, title, week); ----------------------------------------------------- 10을 표현합니다. 3.140000을 표현합니다. a을 표현합니다. name을 표현합니다. 우리는 새싹 용산캠퍼스에서 클라우드 기반 웹서버 과정수업을 3 동안 열심히 들어요. 새나라의 아이들.
- 128을 byte에서 표현하려 하면 컴파일 오류가 발생한다. byte는 1111(2) - 1, 즉 127까지가 최대값이기 때문이다.
byte b = 127; // b = b + 1; 컴파일오류 // byte + int = int, 더 큰 거에 담긴다. int ii = b + 1; byte b2 = (byte)(b + 1); System.out.println("b+1 = " + ii); System.out.println("(byte)(b+1) = " + b2); --------------------------------------- b+1 = 128 (byte)(b+1) = -128왜 이렇게 되는가?
byte b = 127; 8bit
b : [0][1000000] 여기에 1이 더해지면
b : [1][1111111] 이렇게 된다. [1]은 음수.
이걸 타입의 오버플로우라고 한다.
연산자
자바스크립트는?
- == 값이 같은지?
- === 값과 데이터타입이 같은지?
자바는?
- == 값이 같은지?
- != 비동등 비교
- 타입은 명시하고 가기에 타입 확인 연산자 없다.
- typeof( )는 없다.
- 형변환이 가능하다.
단항연산자 / 이항연산자 연산자 계산 우선순위 ( ) > * / > + - (괄호) > 단항 > 이항(산술 > 비교 > 논리) > 삼항 > 대입(=) 산술연산자 + - * / % ++ -- 비교연산자 == != > >= <= 논리연산자 && || ! 대입연산자 = += -= 조건삼항연산자 조건식( t / f ) ? 참일때 연산 : 거짓일 때 연산 형변환
- 자바는 (기본형 변수끼리) 형변환 연산자 통해 형변환이 가능하다.
- String은 기본형 데이터타입이 아니기에 형변환연산자를 사용할 수 없다.
- boolean타입이 형변환 하는 것도, 되는 것도 불가하다.
- 표현범위가 작은 타입에서 큰 타입으로 형변환 하는 것은 형변환연산자를 명시하지 않아도 자동으로 수행된다.
- byte - short - int - long - float - double
- byte b = 127; int i = b; (int) 생략해도 된다. 127
- int i = 100; double d = i; (double) 생략해도 된다. 127.0
- char c = 'a'; int i = c; (int) 생략해도 된다. 'a'의 유니코드 값 (97)
형변환연산자 명시를 반드시 해야 하는 것 : 원래 값이 상실될 수도 있다.
- double d = 3.5; int i = d; 컴파일 에러이다.
- int i = (int)d; i의 출력값은 3이다.
- 3.5에서 3만 가지고 온다는 뜻이므로, 0.5가 생략된다.
조건문과 반복문
조건문 반복문 if-case for switch-case while do-while if (else)문 switch문 if (c == "제목") {
System.out.println("제목을 검색합니다.");
} else if(c == "내용") {
System.out.println("내용으로 검색합니다.");
} else if(c == "작성자") {
System.out.println("작성자로 검색합니다.");
} else {
System.out.println("검색이 불가합니다.");
}switch (c) { c 자리는 int식 혹은 String 가능
case "제목": {
System.out.println("제목을 검색합니다.");
break; switch 블럭을 종료하라
}
case "내용": {
System.out.println("내용으로 검색합니다.");
break;
}
case "작성자": {
System.out.println("작성자로 검색합니다.");
break;
}
default:
throw new IllegalArgumentException("Unexpected value: " + c);
}실제로는
if (c(equeals). "제목") {
}
와 같이 적어야 한다.
equals에 대해서는 조만간 배운당switch (score/10) {
case "10":
case "9": {
System.out.println("A학점입니다.");
break;
}
case "8": {
System.out.println("B학점입니다.");
break;
}
default:
System.out.println("C학점입니다.");
}
위와 같은 방식으로도 적을 수 있다.
하루 끝!
'스타터스 백엔드 3기' 카테고리의 다른 글
221208 자바2(반복문, 배열, 객체지향 프로그래밍) (1) 2022.12.08 제이쿼리 $("#box-list").html() 내부의 let title = $("#title").val()이 선택되지 않는 건에 대하여 (0) 2022.12.07 1205. react (0) 2022.12.05 !!!!!! 왜 int j = i --;와 int j = --i; 가 다른지 이해했다!!!!! (1) 2022.12.04 유데미 스타터스 취업 부트캠프 3기 - 백엔드 2주차 (0) 2022.12.02