6-6 증감연산자

++

1만큼 증가

1) ++x -> 전이연산자 (x = x+1; 와 같음)

x = 10;

System.out.println("++x : " + (++x));

=>++x : 11

*연산하고 나서 출력이 된다.

 

2) x++ -> 후이연산자

x = 10;

System.out.println("x++ : " + (x++));

=> x++ : 10

System.out.println("x : " + (x));

=> x : 10

*x 값 그대로 출력을 먼저하고 더하게 된다. 메모리상태에만 11이 담겨 있다.

위에 명령어 영향으로 인해 밑에서의 x11로 출력이 된다.

--

1만큼 감소

1) --x -> 전이연산자 (x = x-1; 와 같음)

x = 10;

System.out.println("--x : " + (--x));

=>--x : 9

*연산하고 나서 출력이 된다.

 

2) x-- -> 후이연산자

x = 10;

System.out.println("x-- : " + (x--));

=> x-- : 10

System.out.println("x : " + (x));

=> x : 9

*x 값 그대로 출력을 먼저하고 더하게 된다. 메모리상태에만 9가 담겨 있다.

위에 명령어 영향으로 인해 밑에서의 x9로 출력이 된다.

 

 

6-7 논리연산자

-피연산자의 논리곱(AND), 논리합(OR), 논리부정(NOT)을 수행함

&&논리곱(AND)

a && b : ab가 모두 참이면 참

*&& : AND연산자

bootlean b1 = false;

bootlean b2 = true;

System.out.println("b1 && b2 : " + (b1 && b2));
b1 && b2 : false

*모두 참이어야 참

||논리합(OR)

a || b : ab중 하나라도 참이면 참

*|| : OR연산자

bootlean b1 = false;

bootlean b2 = true;

System.out.println("b1 || b2 : " + (b1 || b2));

=> b1||b2 : true

*둘중에 하나라도 참이면 참

!논리부정(NOT)

!a : a의 상태를 부정

* ! : NOT연산자

bootlean b1 = false;

bootlean b2 = true;

System.out.println("!b1 : " + !b1));

=> !b1 : true

System.out.println("!b2 : " + !b2));

=> !b1 : false

*참이면 거짓으로 거짓이면 참으로

 

실습

 

 

6-8 조건(삼항)연산자

-삼항 연산자로 두 개의 피연산자 연산 결과에 따라서 나머지 피연산자가 결정된다.

조건식? 1 : 2

조건식이 참이면 식1이 실행

조건식이 거짓이면 식2가 실행

)

x = 10; y=20;

int result = 0;

result = (x > y) ? 100 : 200;

//(x>y) -> 조건식, 100 -> 1, 200 -> 2

System.out.println("result : " + result);

=> result : 200

 

result = (x < y) ? 100 : 200;

System.out.println("result : " + result);

//(x<y) -> 조건식, 100 -> 1, 200 -> 2

=> result : 100

 

result = (x == y) ? 100 : 200;

System.out.println("result : " + result);

//(x==y) -> 조건식, 100 -> 1, 200 -> 2

=> result : 200

 

 

 

 

6-9 비트 연산자

-c계열에서는 많이 쓰이지만 자바에서는 메모리를 직접관리하지 않기 때문에

 

비트연산자는 많이 쓰이지 않는다.

-데이터를 비트(bit)단위로 환산하여 연산을 수행하며, 다른 연산자보다 연산 속도가 향상 된다.

 (우리가 느낄 수 없을 정도의 빠르기로 속도가 향상된다.)

&: AND 연산

a & b : ab가 모두 1이면 1

| : OR연산

a|b : ab중 하나라도 1이면 1

^: XOR연산

a^b : ab가 같지 않으면 1

 

연산원리

x = 2; //10진수를 2진수 비트단위로 환산시 00000010

y = 3; //10진수를 2진수 비트단위로 환산시 00000011

x=2

0

0

0

0

0

0

1

0

y=3

0

0

0

0

0

0

1

1

*환산한 숫자에서 xy를 나열하여 아래위로 10인지를 확인하여

연산(위에내용)을 하기처럼 한다.

&

0

0

0

0

0

0

1

0

|

0

0

0

0

0

0

1

1

^

0

0

0

0

0

0

0

1

 

)

System.out.println("x & y : " + (x & y));

=> 00000010 => x & y : 2

 

System.out.println("x ^ y : " + (x | y));

=> 00000011 => x ^ y : 3

 

System.out.println("x ^ y : " + (x ^ y));

=> 00000001 => x ^ y : 1

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200309 8강 배열과 메모리  (0) 2020.06.14
20200306 7강 배열  (0) 2020.06.14
20200305 6강 연산자  (0) 2020.06.14
20200304 5강 특수문자와 서식 문자  (0) 2020.06.14
20200304 4-3강 형 변환  (0) 2020.06.14

6강 연산자

-프로그램이 실행될 때 컴퓨터(CPU)에게 계산(연산)업무를 시키기 위한 방법에 대해 학습

-덧셈,뺄셈,곱셈,나눗셈 및 무엇보다 크다, 작다, 같다 등등 연산에 속한다.

-프로그래밍이 실행 될 때 컴퓨터 cpu에게 계산/연산 업무를 시키기 위한 방법에 대해 학습

 

컴퓨터구조

CPU - 연산업무

메모리 - 하드에 있는 데이터를 CPU로 나르는/가져오는 역할

하드 - 데이터용량

 

 

6-1 피연산자 개수에 의한 연산자 구분

단항 연산자 : 피연산자가 하나 존재

) +5 (+ : 연산자, 5 : 피연산자)

-5 (- : 연산자, 5 : 피연산자)

!x (*x의값을 부정할 때 이렇게 사용한다.)

 

이항연산자 : 피연산자가 두 개 존재

) x = 10, x<10, x>10 (x:피연산자, 10:피연산자)

*오른쪽에 있는 숫자를 변수에 대입할 때 대입연산자를 사용

 

삼항연산자 : 피연산자가 세 개 존재

-조건식의 결과가 참이면 수식어 true 거짓이면 false

)조건식 :true ?false

=> 조건식 : 피연산자, true : 피연산자, false: 피연산자

: 연산자, ? 연산자

 

 

6-2 대입 연산자

-오른쪽의 결과를 왼쪽에 대입(할당) 한다.

*수학에서는 = 는 오른쪽 및 왼쪽 값이 같다라고 쓰이지만,

코딩에서는 오른쪽 값을 왼쪽에 대입한다라고 한다.

*코딩에서 오른쪽 및 왼쪽 값이 같다라고 표현하려면

==를 사용하여야 한다.

 

오른쪽 값을 왼쪽에 대입 한다라는 개념의 예

int x = 10;

int y = 20;

System.out.println("x =" + x);

System.out.println("y =" + y);

=> x = 10

y = 20

 

x = y; //y값을 x에 할당/대입 한다.

System.out.println("x = " + x);

System.out.println("y = " + y);

=> x = 20

    y = 20

 

 

6-3 산술 연산자

-피연산자를 이용해서 +, -, *, /, %등 연산자로서 수행한다.

-산수와는 다르게 프로그램에서는 특히 %(나머지를 구하는)나머지 연산자가 하나 더 있다.

 

+

덧셈

int x =10;, int y=20;

System.out.println("x + y = " + (x + y));

x + y = 30

-

뺄셈

System.out.println("x - y = " + (x - y));

x - y = -10

*

곱셈

System.out.println("x * y = " + (x * y));

x * y = 200

/

나눗셈

int형 결과인 정수만 나온다.

System.out.println("x/y = " + (x / y));

x / y = 0

%

나머지

System.out.println("x % y = " + (x * y));

x % y = 10

 

 

6-4 복합 대입연산자

- 산술 연산자와 대입연산자를 결합한 연산자

int x = 10;

+=

 

더하고대입

System.out.println("x += 10 : " + (x += 10));

*x = x + 10을 줄여서 x+=10으로 표현한다.

x가 두 번 나오니 간략하게 x를 하나로 줄인다.

=> x+=10 : 20

-=

빼고대입

System.out.println("x -= 10 : " + (x -= 10));

*x = x - 10을 줄여서 x-=10으로 표현한다.

=> x-=10 : 0

*=

곱하고대입

System.out.println("x *= 10 : " + (x *= 10));

*x = x * 10을 줄여서 x*=10으로 표현한다.

=>x*=10 : 100

/=

나누고대입

System.out.println("x /= 10 : " + (x /= 10));

*x = x / 10을 줄여서 x/=10으로 표현한다.

=>x/=10 : 1

%=

나머지를 대입

System.out.println("x %= 10 : " + (x %= 10));

*x = x % 10을 줄여서 x%=10으로 표현한다.

=>x%=10 : 0

 

6-5 관계연산자

두 개의 피연산자를 비교해서 참/거짓 결론 도출을 한다.

int x = 10; y = 20;

>

a>b : ab보다 크면 참

System.out.println("x > y : " + (x>y));

<

a<b : ab보다 작으면 참

System.out.println("x < y : " + (x<y));

>=

a>=b : ab보다 크거나 같으면 참

System.out.println("x >= y : " + (x>=y));

<=

a<=b : a b보다 작거나 같으면 참

System.out.println("x =< y : " + (x=<y));

==

a==b : ab가 같으면 참 true

System.out.println("x == y : " + (x==y));

!=

a!=b : ab가 같지 않으면 참 true

System.out.println("x != y : " + (x!=y));

 

실습 (산술연산자, 복합대입연산자, 관계연산자)

 

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200306 7강 배열  (0) 2020.06.14
20200305 6-2강 연산자  (0) 2020.06.14
20200304 5강 특수문자와 서식 문자  (0) 2020.06.14
20200304 4-3강 형 변환  (0) 2020.06.14
20200304 4-2강 Java기본자료형  (0) 2020.06.14

5강 특수문자와 서식 문자

-숫자와 문자 외에 특수문자와 서식문자가 있다.

-특수문자 : 특수한 목적으로 쓰이는 특수문자

-서식문자 : 특정 서식에 쓰이는 서식문자

 

5-1 특수문자

*\ 은 역슬러시를 뜻한다.

 

1.\t 명령어

- tab 기능

) System.out.prinln("Good\tMorning~"); 입력시

하기와 같이 Good 뒤에 tab이 적용되어 나온다.

=> Good Morning~

 

2.\n 명령어

-줄 바꿈

)System.out.prinln("Good\nMorning~"); 입력시

=>Good

Morning~

 

3.\‘ 명령어

-작은 따옴표

) System.out.prinln("Good\'Morning~\'"); 입력시

=>Good 'Morning~'

 

4.\“ 명령어

-큰 따옴표

) System.out.prinln("Good\"Morning~\""); 입력시

=>Good "Morning~"

 

5.\\ 명령어

-역슬래쉬

) System.out.prinln("Good\\Morning~\\"); 입력시

=>Good \Morning~\

 

*\(역슬래쉬)사용하여야 특수문자가 출력 된다.

*양옆에

 

****주석처리 두가지 방법(코드를 왜 이렇게 작성했는지 동료들이 알도록 메모하는 용도)

1. \*   *\

-\*   *\여기 사이에 있는 내용은 주석처리 된다.

 

2. \\ (// 역슬래쉬)

- 한줄만 주석처리 할 때 // 역슬래쉬 두 번을 한다.

예)\\가나다라마바사

 

 

5-2 서식문자

-어떠한 식을 나타낼 때 사용한다.

 printf() 메서드를 이용

*fformat(형식)을 뜻함.

 

%d

10진수

System.out.println("오늘의 기온은 10도입니다.“);

System.out.println("오늘의 기온은 %d도입니다.\n", num1);

 

int num1 = 20;

System.out.println("오늘의 기온은 "+ num1 + "도 입니다.“);

System.out.println("오늘의 기온은 %d도입니다.\n", num1);
//10진수로 숫자가 변경되어 출력된다.

%o

8진수

System.out.println("오늘의 기온은 %o도입니다.\n", num1);

//8진수로 숫자가 변경 되어 출력 된다.

%x

16진수

System.out.println("오늘의 기온은 %x도입니다.\n", num1);

//16진수로 숫자가 변경 되어 출력 된다.

%c

문자

(char)

System.out.printf("소문자\'%c\'의대문자는\'%c\' 입니다.\n", 'a', 'A');

*단문자일때는 ‘’작은따옴표을 사용

%s

문자열

(string)

System.out.printf("\'%s\'을대문자로바꾸면\'%s\' 입니다.\n", "java", "JAVA")

*문자열일때는 “”큰따옴표를 사용할 것

%f

실수

(float)

float f = 1.23f;

System.out.printf("f = %f\n", f);

실수

(double)

double d = 1.23456d;

System.out.printf("d = %f\n", f);

*주로 사용하는 서식문자만 사용 정리함.

*왜 굳이 특수문자를 사용하는가

-실시간으로 데이터(시간, 날짜)가 들어올 때 서식 문자를 이용한다.

)

char c1 = 'a';

char c2 = 'A';

System.out.printf("소문자\'%c\'의대문자는\'%c\' 입니다.\n", 'a', 'A');

c1c2의 로직을 서버네트워크에서 받아오는 값으로 처리를 해주면

그 값이 그 때마다 실시간으로 적용이 되어 출력이 된다.

 

실습1

실습2

 

 

5-3 서식문자의 정렬과 소수점 제한 기능

-서식 문자를 이용해 출력 문자의 정렬 및 소수점 제한 기능을 사용할 수 있다.

 

//서식문자 정렬 기능 %d(10진수 서식문자)

System.out.printf("%d\n", 123);

System.out.printf("%d\n", 1234);

System.out.printf("%d\n", 12345);

=> 123

1234

12345

 

//서식문자 오른쪽으로 정렬

System.out.printf("%5d\n", 123);

System.out.printf("%5d\n", 1234);

System.out.printf("%5d\n", 12345);

=> 123

1234

12345

 

//서식문자 소수점제한 기능

System.out.printf("%f\n", 1.23); => 1.2300000

(00000이 나오게 하는 것을 보고 싶지 않을 때)

System.out.printf("%.0f\n", 1.23); => 1.2

System.out.printf("%.1f\n", 1.23); => 1.23

System.out.printf("%.2f\n", 1.23); => 1.23

System.out.printf("%.3f\n", 1.23); => 1.230

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200305 6-2강 연산자  (0) 2020.06.14
20200305 6강 연산자  (0) 2020.06.14
20200304 4-3강 형 변환  (0) 2020.06.14
20200304 4-2강 Java기본자료형  (0) 2020.06.14
20200304 4강 기본자료형  (0) 2020.06.13

4-3 형 변환

-int형을 쓰다가 long으로 확장/변환 가능하다.

-long형을 쓰다가 공간이 너무 클 경우에 int형으로 변환이 가능하다.

 

형 변환의 두가지 종류

1. 자동적(묵시적) 형 변환

-작은 공간의 메모리에서 큰 공간의 메모리로 이동

 작은 크기의 자료형이 큰 공간으로 들어갈 때 문제 없이 들어갈 수 있다.

ex) byte by =10; //1byte

int in = by; //4byte로 이동, 이렇게 이동을 시켜준다.

System.out.prinln("in = " + in);

=>in = 10

 

2. 명시적 형 변환

-큰공간의 메모리에서 작은 공간의 메모리로 이동할 때 문제가 생기기 때문에 하기와 같이 명시를 해주어야 한다.

 iVar라는 변수가 byte에 담기려면 byte로 형변환을 해서 들어가야 한다고 명시를 해주어야 한다.

 그래서 명시적 형변환이라고 부른다.

 

)int iVar = 100;

byte bVar = (byte)iVar; // byte숫자범위 : -127 ~ +128

System.out.println("bVar = " + bVar);

=>bVar = 100

 

//다시

iVar = 12456;

bVar = (byte)iVar;

System.out.println("bVar = " + bVar);

=>bVar = 64 (데이터손실)

//byte로 들어가기에 숫자 범위에 있지 않고 너무 커서 데이터가 손실 되고 들어갈 수 있는 만큼만 들어간다.

 

실습

*데이터 누실이 일어나지 않게 하기 위해 큰숫자의 데이터를 사용할 때에 처음부터 int나, double을 사용해야 한다.

 

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200305 6강 연산자  (0) 2020.06.14
20200304 5강 특수문자와 서식 문자  (0) 2020.06.14
20200304 4-2강 Java기본자료형  (0) 2020.06.14
20200304 4강 기본자료형  (0) 2020.06.13
20200304 3강 변수  (0) 2020.06.13

4-2 Java 기본자료형

정수형 (byte, char, short, int, long)

a. byte-1 byte

-메모리에서 1byte만 차지한다, 8bit 공간만 갖는다,

-표현할 수 있는 정수의 크기가 작다.

(범위 -127 ~ +128 -256개의 정수만 다룰 수 있다.)

*128까지 표현을 할 수 있는데 숫자 200을 넣으면 129부터는 누실(overflow)발생

*잘 사용하지 않는다.

 

b. char (character)

-2byte만 차지한다. 16bit 공간만 갖는다.

-단일 문자 예)A, B, 등등

*잘 사용하지 않는다.

*캐릭터는 숫자가 아니라 문자인데 왜 정수형에 포함시켰는가

-pc컴퓨터는 binary(1,0)으로만 표현할 수 있어서, ABC를 이해할 수 없지만

 A라는 문자를 컴퓨터에서는 65로 표현하자라고 규정을 해서 아스킥코드 만들어놓았다.

 그래서 각각 문자마다 아스킥코드로 만들어 놓았다.

 

c. short

-2byte만 차지한다. 16bit 공간만 갖는다.

-똑같은 정수를 표현하지만 byte보단 큰 수까지 표현을 할 수 있다.

-하지만 그렇게 큰 범위의 정수를 표현할 수 없다.

 

d. int

-4byte만 차지한다. 32bit 공간만 갖는다.

*실생활에서 사람이 필요한 숫자는 32bit 안에서 해결 할 수 있어 많이 쓰인다.

 

e. long

-8byte만 차지한다. 64bit 공간만 갖는다.

*t실생활에서 쓰지 않는 큰숫자까지 취급을 해서 사용할 수 있다.

*얼마나큰숫자????

=>charint가 많이 쓰이고, 2개 중에서도 int가 많이 쓰인다.

 

정리

분류

이름

바이트수

비고

정수형

byte

1 byte

-127  ~  +128

short

2 byte

-32,768  ~ +32,767

int

4 byte

-2,147,483,648 ~
+ 2,147,483,647

long

8 byte

-9,223,372,036,854,775,808 ~
+9,223,372,036,854,775,807

 

실수형(float, double)

)소수점

-3.1456

-1.00056

-1.78

 

a. float

-4byte만 차지 한다. 32bit 공간만 갖는다.

*소수점을 표현하기에는 공간이 작다.

 

b. double

-8byte만 차지한다. 64bit 공간만 갖는다.

*double만 알아도 프로그래밍하는데 지장이 없을 정도로 많이 쓰인다.

 

 

 

논리형 (boolean)

-참과 거짓이라고 한다.

*c계열에서는 0false라고 하고 0이 아닌 숫자는 true라고 한다.

c++true and false가 생겼다.

자바에도 true and false가 있다. 그것이 boolean

 

a. boolean

-1byte, 8bit의 공간을 갖는다.

 

논리형 메모리관리

*선언한 변수의 값이 직접 메모리 공간에 들어가 직접 그 메모리 공간에 있는 변수 값으로 동작한다.

 

 

문자열 (string)

문자열은 charcter가 안되는데 문자열은 어떻게 다루는가?

-string으로 다룬다.

-문자열을 다루는 String은 첫글자가 대문자로 시작한다.

-문자열을 다루는 String은 문자열을 대입할 수 있다.

)String str = "ABCDEFG";

-그래서 엄밀히 말하면 기본자료형이 아닌 객체자료형이다.

-4byte 차지 한다. 32bit의 공간을 갖는다.

 

문자열 메모리 관리

*String 메모리 관리는 String 값은 다른 공간에 만들어 놓고 실제로 선언한 변수 str에는 또 다른 공간에 만들어 놓고

str은 String이 가지고 있는 ABCDEFG의 객체 주소자료만으로 동작하게 된다.

*기본자료형은 첫글자가 소문자로 시작한다.

 

분류

이름

바이트수

비고

실수형

float

4 byte

단정도 실수형(유효 자리는 7

double

8 byte

 

논리형

boolean

1 byte

true, false

문자열

string

4 byte

기본자료형이 아닌 객체자료형

 

 

실습

1. 프로젝트 다시 생성해보기

*생성후 해당 프로젝트 class 생성할 때 클래스 이름을 대문자로 쓰는 습관을 들여 놓는 것이 좋다.

*23lines = "내이름“; 으로 변수 변경이 가능하다.

변수에 담은 자료형은 언제든지 변경이 가능하다는 것

4강 기본자료형 (3강 변수 선언하는 법의 연장선)

-변수를 만들 때 어떠한 자료(정수, 실수)의 형태를 넣을 것인가를 볼 것이다.

 

4-1기본자료형과 객체자료형

a.자료형은 종류 2가지

-기본자료형

-객체자료형

 

a-1.기본자료형

-데이터가 변수에 직접 저장된다.

-메모리에 데이터가 직접 들어간다.

-변수를 선언하면 선언하는 변수의 메모리공간이 할당 되고 거기에 데이터가 초기화를 거쳐서 들어간다.

*정수/실수/참거짓에 따라서 메모리 크기가 달라진다.

ex) int i = 10

 

a-2.자바의 기본자료형 종류

정수

실수

문자

문자열

블리언(,거짓)

 

b-1.객체자료형

-객체를 만들어서 데이터가 직접 메모리 공간에 저장 되는 것이 아니라,

 객체(object)를 가리키는 i를 만들어서 객체를 가리키는 또 다른메모리 공간을 하나를 더 만들어

 객체가 존재하는 주소를 i공간에 저장한다.

 

재정리

- 객체를 만들어 하나의 메모공간에 담아 놓고,

  실제i라는 변수는 다른 메모리공간에 객체를 가리키는 특정주소(객체가 존재하는 메모리주소=레퍼런스)를 참조해서

  변수정보로 사용한다.

-변수를 사용할 때 실제로 객체를 담는 것이 아니라 다른 곳에 만들어 놓고,

 변수는 객체가 존재하는 메모리 주소만 가지고 있다.

 (그래서, 레퍼런스의 크기는 항상 4바이트(16진수)로 고정이 되어 있다.)

*객체를 바로 변수로 만들 수 없다.(객체 자료형은 객체 메모리 주소가 변수에 저장된다.)

*i라는 변수는 객체 메모리 주소를 참조해서 사용한다.

*c계열에서는 포인터라고 하고, Java에서는 레퍼런스라고 한다.

3강 변수

3-1변수란

-데이터(자료)를 임시로 담을 수 있는 상자(메모리공간)

ex)학생들의 점수를 어딘가에는 데이터화해서 저장을 해야 연산을 할 수 있다.

이 때 변수를 이용한다.

 

int i=10;

int j=20;

*int - 자료형(정수,문자열 등등)

 

3-2변수 선언과 초기화

a.선언부와 초기화

-선언부까지 작업을 하면 메모리 일정한 공간만 확보를 한 것이다.

-대입연산자를 통해서 내가 원하는 변수값을 대입할 수 있다.

 

예제)

int i = 10;

___________________________________

" int i " - 선언부

" = " - 대입연산자

" 10 " - 초기화

__________________________________

"int" - 자료형

" i " - 변수이름

" 10 " - 변수값

___________________________________

 

b.변수선언 방법 2가지

1.변수선언 후 초기화 진행

int i; #변수선언

i = 10; #변수 초기화

System.out.println("i = " + i);

=> i = 10

 

2.변수선언과 초기화를 동시에 진행

int j = 20; #변수 선언 & 초기화

System.out.println("j = " + j);

=> j = 20

 

실습

*결국 값은 같게 나온다.

*추후에 변수 초기화를 해야 할 상황을 대비해 

 1번처럼 int i;정도로만 설정 해주는 용도로 사용해도 좋을 것 같음

*ctrl + F11 -> 실행 단축키

 

3-3메모리 할당과 진법(실습)

int

데이터형

-정수가 있고 실수(소수점)가 있다.

 

자료형

-문자(A : 문자, AB:문자열)

*int 자료형은 메모리에서 4byte(=32bit)공간은 차지함

int i;로 할시에 32bit만 확보가 된다.

i =10; (10진수 : 10, 2진수 : 1010 형태로 채워지게 된다)

 

실습

 

3-4변수 데이터 변경

-변수에 저장된 데이터는 언제든지 변경할 수 있다.

*변수는 말그대로 변하는 수이다.

*한번 선언한 이름을 다시 선언할 수는 없다.

 

변수를 왜 사용하는가

-재활용하기 위해서

) 학점관리, 반학생들의 점수를 총합한 값

)어떤 사람의 기상시간을 알리는 시간을 설정을 한다.

-a라는 변수에 5시간을 설정 한 것을 계속 사용하게 한다.

-다른데이터를 하나의 상징적인 의미로 담아 놓고 재활용해서

 쉽게 사용하게 하기 위해서 변수를 사용한다는 개념으로 이해하면 된다.

2Java 프로그램의 실행구조

-1강은 자바의 전체적인 개요에 대해 설명

-2강은 실행구조에 대해 살펴본다.

 

2-1 환경변수 설정

1.환경변수란

JDK, JRE 환경변수를 설정하는 이유

-코딩을 한 것들이 java.exejavac.exe 경로 안에 있어야 코드작성한것들이 실행된다.

그래서 일일이 설정을 하지 않고, 어떠한 javac.exe, java.exe를 다른 디렉토리에서도 실행 할 수 있도록 하기 위해

환경변(Path)bin 경로를 세팅/등록 한다.

 

JDK->bin에 하기 파일들이 있다.

java.exe

-> 컴파일 되어서 클래스파일이 나오고 자바프로그래밍을 구동 시켜주는 JVM구동 명령

javac.exe

-> 컴파일러로 이용 되는 파일

 

 

환경변수(Path) bin 경로를 세팅/등록 하기위해 해야할 것들

a. JAVA_HOME 환경변수 추가

자바가 어디에 설치되어 있는지 시스템변수에 생성

내컴퓨터->속성->시스템속성->환경변수->변수생성 및 편집(java가 있는폴더까지 경로설정)

 

세팅1

 

b. Path환경변수에 JDK bin 디렉토리 추가

*자바가 어디에 있는지 알고 있는 상태에서 추가할 것

 

세팅2

 

*자바가 제대로 설치 되었고 환경변수가 잘 설정 되었는지 확인 하는 방법

window + r 로 실행파일을 실행시키고 cmd를 입력하여

command 창에서 java -version을 입력하면

하기와 같이 확인 할 수 있다.

 

 

2-2 Java 컴파일러와 JVM

java 소스 작성부터 프로그램 실행까지의 순서/원리

1. java 소스 (개발자가 공수하는 파트)
xxxxx.java 파일 -사람이 이해할 수 있는 소스코드/파일
(자바문법에 맞게 만들어진 소스코드. 기계는 이해할 수 없음.
그래서 기계가 저 확장자 파일을 이해할 수 있도록 전환해야 함->compile)

2. java compiler으로 바이트 코드 파일을 만듬
(javac.exe : 확장자 파일을 이해할 수 있도록 하는 실행)
이클립스에서는 소스코드 작성후 저장버튼을 누르면 자동으로 .class라는 확장자라는 파일이 만들어진다. 그것이 밑에 java application.class(자바의 기술을 응용해서 만든 application)

3. 바이트 코드 파일(xxxx.java에서 xxxxx.class로 바뀐다.)
(xxxxx.class : 소스코드 작성후 저장버튼을 누르면 자동으로 javac.exe가 컴파일해주면서 만들어진다)

4. java.exe : JVM 구동
(java application class파일을 java virtula machine이 읽어서 적혀 있는대로 컴퓨터를 동작시킨다)

5. 기계어로 바뀌어서 실제로 컴퓨터에서 실행(기계어로 바뀐 것이 컴퓨터에서 실행)
*기계에서 실행이 되었다라는 것을 LINK되었다라고 표현한다.
LINK 될 때(PC에서 하는 일)
-메모리로딩/실행준비/실행결정/초기화 => 실행

 

 

2-3 Java 프로그램 실행

a.자바소스코드 작성 단계까지 수작업

public class Mainclass {

public static void main(String[] args){

#jvm이 작동될 때 제일 먼저 찾는 main method

System.out.println("Hello Java World!!");

}

}

 

b.compile해주기 위한 수동작업(javac.exe가 클래스파일을 만들어줌)

c.파일출력

*환경변수 편집을 통해

javac.exe, java.exe를 다른 디렉토리에서도 실행 할 수 있도록 하기 위해

환경변(Path)bin 경로를 세팅/등록을 해주어야 함.

 

=>이 수작업을 이클립스틀 통해서 모두 자동으로 가능하다.

 

 

2-4 이클립스 사용의 정점

컴파일, 디버깅 그리고 실행까지 쉽게 할 수 있다.

 

2-5 가비지 컬렉터

c계열 프로그램

-개발자가 직접 메모리를 관리해야 하고

메모리를 잘못 관리하면 메모리 누수가 발생하고 타프로그램 동작이 멈출 수 있음.

 

java프로그램

-개발자가 메모리에 접근할 수 없고

가비지 콜렉터가 불필요한 메모리를 회수해서 메모리를 최적화함.

 

*나같은 경우에는 잘 빠뜨리는 느낌이라 메모리누수가 발생할 것 같은 느낌이어서

 c계열 프로그램이 안맞을 수도 있을 것 같다..

'신입개발자로 취업하기까지 > JAVA' 카테고리의 다른 글

20200304 4-3강 형 변환  (0) 2020.06.14
20200304 4-2강 Java기본자료형  (0) 2020.06.14
20200304 4강 기본자료형  (0) 2020.06.13
20200304 3강 변수  (0) 2020.06.13
20200303 1강-자바프로그래밍이란  (0) 2020.06.08

1. 자바란

-가장 많이 사용 되는 언어

-웹서비스에 사용

-모바일에도 사용

-시스템 구축 및 다양한 산업 분야에 이용

 

 

2. 자바프로그래밍이란?

a.코딩- 개발자 업무영역

 

b.코드가 실행되기까지의 구조

->Java source code.java

->compile(compiler가 존재)

->Java application.class->run->Java virtual machine->run->computer

 

코드 실행되기까지의 순서

1. java source code.java -사람이 이해할 수 있는 소스코드/파일

(자바문법에 맞게 만들어진 소스코드. 기계는 이해할 수 없음.
 그래서 기계가 저 확장자 파일을 이해할 수 있도록 전환해야 함->compile)

2. compile (확장자 파일을 이해할 수 있도록 하는 실행)

-이클립스에서는 소스코드 작성후 저장버튼을 누른다.
-저장 버튼을 누르면 자동으로
.class라는 확장자(complie이 된 파일)라는 파일이 만들어진다.
-컴파일된 확장자 파일이 3번에 java application.class 이다.(자바의 기술을 응용해서 만든 application)

3. java application.class (소스코드 작성후 저장버튼을 누르면 자동으로 만들어진다)

(java source code.java를 저장하면 compile이 작동하면서 컴퓨터가 이해할수 있는 java application.class를 만든다.

4. run 1

(java application class파일을 java virtula machine이 읽어서 적혀 있는대로 컴퓨터를 동작시킨다)

java virtual machine (내가 설치[다운로드]한 프로그램)

5. run 2

(java application class파일을 java virtual machine이 읽어서 적혀 있는대로 컴퓨터를 동작시킨다)

computer

 

3. 자바언어의 탄생

-제임스 고슬링이 oak언어를 처음 개발하고 자바 언어로 발전

-가전제품에 탑재할 수 있는 프로그램을 개발하기 위해 탄생

-jsp, 서버가 알려지게 되면서 자바도 알려지게 됨

 

 

4. 자바언어 특징

a.언어트리

 

-FORTRAN 위에 어셈블리 언어 등등 있다.

 

 

5. C, C++이 있는데 왜 자바언어를 만들었는가

-초창기 시절의 자바언어의 단점을 본다면 C,C++에 비해서 속도가 굉장히 느리다.

 

*C,C++이 더 빠른 이유

-C,C++은 메모리에 직접 접근이 가능해서 메모리를 직접 관리한다.

 

*메모리역할 : PC안에도 메모리가 있듯이 메모리는 실제로 일꾼 일을 하는 역할을 한다.

*CPU역할 : CPU는 연산을 한다. 연산(+,-)을 하기 위해 데이터를 CPU에 넣어주어야 한다.

              그럴 때 데이터를 왔다갔다하게 이동 시켜주는 것이 메모리이다.

 

 

6. 초창기 시절 자바속도가 느렸던 이유

-리소스(메모리,CPU)를 많이 사용한다.

-자바는 직접 메모리를 관리할 수 가 없고, 중간에 매개체를 두고 한단계 프로세스가 더 있으므로 속도가 느리다.

 하지만, 현재 2018년도에는 자바가 굉장히 많이 빨라졌다.

 

 

7. 현재 자바의 장점

-초창기 단점이 전부 해결이 되진 않음

 

a. 객체지향 언어로 기능 부품화가능

 내가 작성한 코드, 다른 사람이 작성한 코드, 또 다른 사람이 만든 코드를 각각 객체라고 하고,

 그 객체를 합쳐서 확장해 나갈 수 있다는 개념

 내가 원하는 부품만 떼고, 다시 좋은 것으로 대체하는 기능을 자바에서 지원

 

b. JRE를 이용하여 운영체제로부터 자유로움(WRITE ONCE, RUN ANYWHERE)

 윈도우 환경에서 코드를 작성했지만, 리눅스 환경에서는 다시 코드를 작성해야 하지만,

 JRE를 통해서 알아서 리눅스 용으로 컴파일이 되어 작성된 코드가 돌아간다.

 즉, 나는 한번만 코딩을 하면 JRE를 이용해서 윈도우/OS/리눅스에서도 돌아간다.

 

c. 웹 및 모바일 프로그래밍이 쉬움

   안드로이드 자바기반으로 되어 있다. 모바일에 최적화된 프레임워크를 제공하고 있다.

 

d. GC(garbage collector)를 통한 자동 메모리 관리를 지원 : 메모리비접근단점보완

   c,c++는 메모리를 쓸만큼 쓰고 반환할 때는 반환한다.

   자바는 그럴 수 없다. 내가 쓸만큼 메모리를 쓰고, 놔두면 GC가 쓸필요가 없구나 하고 알아서 메모리를 정리해준다

 

e. 실행속도가 많이 개선 되어 속도가 빨라짐

 

8. 자바개발을 위한 준비물 및 HELLO WORLD 출력

 

a. 준비물1

JDK

Java Development Kit를 내가 사용하는 PC에 설치

JRE

-자바프로그래밍이 실행될 수 있도록 환경을 만들어준다
 OS환경에 간섭을 받지 않고 코드를 한번만 작성하면 알아서   다른 OS에서 실행되도록 도와준다.

API

-JVM을 컨트롤 하기 위해 API가 있다.
-API는 기능들이다.
-JVM이 일할 수 있는 기능들로 바깥쪽을 감싸고 있다.

JVM

Java Virtual Machine(자바 가상머신)
-프로그래밍을 하고 나면 JVM이 실행 되면서 작성된 코드가   실제로 실행된다.

*JDK(Java Development Kit)설치

-개발자가 아닌 사람은 프로그래밍 사용하는 입장에서는

-JRE(Java Runtime Environment)만 있으면 된다.

 

b. 준비물2

eclipse

- java 언어를 코딩하기 위한 기본 툴

- IDE(Integrated Development Environment : 통합개발환경)

- 무한 디버깅을 할 수 있다.

*어디서 문제가 생겼는지 확인하는 작업을 디버깅이라고 표현한다.

 

bin(binary)-컴파일된 코드(기계가 이해할 수 있는 코드)

src-작성한 코드

 

 

c. 실행 (Hello World 출력)

package explorer에서 실행

-src에 클래스를 만든다.

-글자폰트를 preference->general->appearance->text font->calibri(내스타일로)

-main을 누르고 ctrl+스페이스를 누르면 assitance가 뜨고 엔터를 치면 바로 자동으로 작성이 됨을 볼 수 있다.

 

main method 사용

-main을 타입후 ctrl + 스페이스 하기와 같은 main method가 만들어 진다.

 ->public static void main(String[] args)

*어느 프로그래밍이든 main method가 있다.(메인함수라고도 함)

 

main method

-프로그래밍이 시작될 때 가장 먼저 실행되는 프로그래밍의 출발점을 지정해주는 method이다.

*main method를 만들어 놓으면 많은 파일들 안에서 수많은 기능들 중 안에

 main method 안에 있는 것부터 프로그래밍을 시작되게 한다.

 

출력을 하기 위한 명령어

-sysout 타입후 ctrl+스페이스를 누르면 다음과 같은 출력명령어가 생성된다.

->System.out.println()

 

)hello world 작성

->System.out.println(“Hello Java World!!")

작성후에 ctrl + s 저장을 하면 src폴더에 저장이 되고,

bin(binary)에 컴파일(기계가 읽을 수 있는코드)Mainclass.class 파일이 생성됨을 확인 할 수 있다.

 

저장을 하면

 

d. Hello worldrun(play버튼)을 누르면 밑에 console메뉴에 헬로자바월드가 출력 됨을 볼 수 있다.

 

1. orderorderItem에서의 cascade사용

 

a.cascade = CascadeType.ALL 미사용시

public class Order {

.....

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)

private List<OrderItem> orderItems = new ArrayList<>();



persiste(orderItemA)

persiste(orderItemB)

persiste(orderItemC)

persiste(order) //엔티티당 각각 persist를 호출 해주어야 한다.

}

 

b.cascade = CascadeType.ALL 사용시

public class Order {

.....

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)

private List<OrderItem> orderItems = new ArrayList<>();



persiste(order) 
//만 사용해주면 된다. cascade는 persiste를 전파한다. 
//orderItem 안에 있는 컬렉션(orderItemA,B,C)들 모두를 호출해준다. 
//CascadeType.All이기 때문에 삭제될 때에도 모두 삭제 된다.
}

설명

-OrderorderItemscascade옵션을 사용함

-orderItems에 데이터를 넣어두고 order를 저장하면 orderorderItems가 같이 저장된다.

 orderItemsjpa에 개수만큼 저장하고, 그다음에 컬렉션에 넣은다음에 order를 또 jpa

 persist를 해서 저장을 해주어야 한다.

 

모르는 단어

*persist

*컬렉션

*persist

 

 

2. orderdelivery에서의 cascade 사용

casacade 설정법

실습

public class order{

.............

@OneToOne(fetch = Lazy, cascade = cascadeType.ALL)
@JoinColumn(name = "delivery_id")
private Delivery delivery;
}

설명

a. cascade 미사용시

-order, delivery 각각 persist를 해주어야 한다.

 

b. cascade 사용시

-order, delivery를 한번에 persist를 한다.

모든엔티티는 기본적으로 persist를 저장하고 싶으면 각자 해주어야 하는데,

delivery 값만 세팅후 orderpersist를 하면 cascade를 활용해서

위에 작성된 코드들을 한번에 persist호출이 된다.

 

 

3. 양방향 연관관계 편의 메서드

 

비즈니스 두 개의 로직 원자적으로 묶는 메서드를 구현한다.

public static void main(String[] args) {

Member member = new Member();

Order order = new Order();

 

member.getOrders().add(order);

order.setMember(member);

 

->양방향 연관관계세팅하려면 ordermember가 있으면

   member가 주문을 하면 member class안에 list order에 넣어주어야 한다.

   양방향에서 값을 넣어주어야

   order.getMember, member.getOrder를 통해

   로직을 통해 왔다갔다하려면 값을 세팅해주어야 한다.

 

실습1

실습2

*핵심적으로 컨트롤 하는 쪽에 메서드를 작성하는 것이 좋다.

 

+ Recent posts