Java

6. 자바 언어의 특징

90년 초반에 tv미국 땅이 넓어서 케이블을 심어서 보냄. sun이라는 회사가 케이블을 통해 양방향 수신이 가능하지 않을까 라고 생각을함.
컴퓨터가 아닌 tv에 심을 수 있도록 햇다. 여러 가전제품에도 심으면 어떨가 하던게 green system임.
c++문제점을 지적하고java라는 언어를 만들엇다.


c++ / java
객체 생성과제거 -> 사람이 직접 안지우면 객체가 안없어짐-> java delete키워드 제거
참조변수와 포인터변수 -> 객체의 포인터제거
이차 이상의 포인터문제 -> 모든 포인터제거
데이터 구조를 정의하는 두가지 방법 -> struct키워드제거
함수지향? 객체지향? -> 함수는 메소드로만 사용하도록 제약
컬렉션의 부재 -> 언어에 컬렉션을 포함
글로벌한 문자 데이터처리의 복잡성 -> 다양한 인코딩 문자열 기능 개선
등등 필요없는 것이 제거가 되엇다.
자바언어의 특징(언어만의 특징 c++과의 비교시)
1.간결성
2.언어에 컬렉션포함
3.완전한 객체지향 언어

7. 자바 플랫폼(Platform)의 특징

새로운 wora api의 특징
한번 작성되면 여러군데에서 작동할 수 있도록 만들엇다. 자바는 단일한 자바플랫폼으로 javaapi를 사용할 수 있게 만들엇다.
단점은 자바를 설치해야한다는 것이 있다.

8. 자바 번역기의특징

자바코드 x = 3+4 -> 번역기 -> mov ax, 3... ->번역기 -> 기계코드 000111000...
cpu가 한개가 아니라 번역을 한번에 기계로 바꾸는게 어렵다.
1단계 형태소 분석 -> 2단계 구문분석 -> 3단계 의미분석 -> 4단계 중간코드-> 5단계 최적화 -> 6단계 물리코드
이 중간단계까지를 컴파일러를 사용하면 나중에 실행시 인터프리터를 사용해서 실행하도록한다.
이 중간코드가 만들어지는데 그것이 바이트 코드(가상cpu코드, 수도코드)이다. 컴파일러 언어가 가상의 cpu를 염두에 두고 번역시키는 것이다.
자바코드-> 번역기 (컴파일러) -> 바이트코드 -> 번역기(인터프리터) -> 기계ㅒ코드
실행환경과 자바 개발을 위한 컴파일러 디버거 등 유틸리티를 가지게 된다.
class파일로 컴파일해주고 이것을 java유틸리티로 실행한다.

9. 값의 종류와 표현방법

9.1 정수값

26 0x1a(16진수0x) 032(8진수0) 0b11010(2진수0b) 숫자앞에 각각 몇진수인지를 나타내는 것을 적어줘야한다.
정수는 얼마만한 크기를 가지고 있을까? 수학에서는 무한대의 값을 표현할 수 있다. 하지만 컴퓨터는 전구를 끄고 키고 등등으로 햇어야햇는데 그래서 유한하다.
정수는 32bit로 표현한다. 4바이트까지 가능하다.
그 이상의 숫자를 표현하기 위해 26L이 나타낫다. L을 붙이면 8바이트를 사용한다.

9.2 실수값

123.4 실수는 진법을 사용하지 않는다.
123.4f -4바이트실수 123.4d -2배(8바이트)
안쓰면 8바이트
1.234e2지수표현 e가 두칸이동했다는 뜻 이런 지수표현으로 할수도잇음.

9.3 문자값

'A 이 문자는 내부적으로는 숫자로 인식된다. '\U0065'이런 코드값으로 문자를 나타낼수잇다.

9.4 진리값

true false

10. 값의 진법 변환

https://chunpinge.tistory.com/140 css색상할때 배운 진법 을 다시보자.

11. 값의 형식명칭과 형식변환

정수 26 크기 4바이트 정수는 4바이트만 잇는게 아니다.
1바이트 byte
2바이트 shrot
4바이트 int
8바이트 long
크기에따라 사용하고싶다면 알아서 사용하면된다.
표현하는 것은 차이가 없다.
long x = 30; 수학은 무한한 공간에 값을 줫지만 자바는 한정된 공간을 두고 값을 담아야한다.
이것은 long라는 크기에 30이라는 정수를 담은 것이다. 공간이 8바이트라면 값도 8바이트가 되어야한다.
에러가 나지 않는다. 묵시적으로 문제가 되지않는다고 생각해서 둘중하나를 맞춘다. 그래서 30이 30L

byte x = 30;은 들어가려하면 데이터 손실이 될가능성이 잇어서 묵시적으로 변환하지 않는다. ->그래서 컴파일과정에서 에러를 낸다.
프로그래머가 상관이 없다고 생각하면? byte x = (byte) 30; byte로 잘라서 넣으라고 명시적인 형변환을 하면 넣을 수있다.

실수형식
float x = 3.5; 8바이트를 x에 넣엇으니 문제 발생 한다. float x = (float) 3.5;
double x = 3.5f; 묵시적으로 바뀌어서 된다.
문자형식 char 2바이트

부울형식
boolean 1비트 1/0표현

12. 정수 값의 크기와 범위

1비트가 잇을때 표현할수 잇는것 2가지 전구가 켜지고 꺼진상태
2비트면? 2*2 4가지
3비트면 2*2*2
8개면 2^8개 256개 표현할수잇다.
그러면 256개로 표현할 수 있는 정수 범위는?
0 ~ 255 (256개이기때문임) -> 0 ~ 2^8 - 1이 된다.
그럼 음수도 포함하려면? 맨앞의 1비트를 가지고 양수인지 음수인지 비교한다. 부호비트 최상위비트 msb라고 한다.
-2^7 + 1 ~ 2^7 -1까지 가능하게 된다. -127

0 0

127인데 양수음수에서 0이 겹처서 음수에 하나준다. -128~127 -2^7 ~ 2^7-1 까지이다.

13. Float Point 실수 값의 크기와 범위

부동소수점(float point)은 비트와 관련잇다.
4바이트 -> 32비트

13.1 fixed point

실수가잇다면 부호비트 정수부와 소수부로 나누어져잇다.
쉽게나누는 방법은 부호비트 1비트 정수부 15비트 소수부16비트해서 딱 반 나누는게 표현하기 편하다.
이렇게 표현한것이 fixed point이다. 그런데 이것이 단점이 잇다. 값을 표현하는데 유연하지 못하다.
이러면 정수부가 -2^15 ~ 2^15-1밖에 못 표현한다. 최댓값이 32768 밖에 안된다. 정수부가 이거밖에 표현못하면 너무 작은 수 이다.

13.2 부동 소수점이다.

소수가 남아돌때 정수부로 준다면 유연하게 대응할 수 있다. 이것이 부동소수점이다.(float point)
4바이트를 부호비트 지수부 가수부 로 나눈다. 12.125 -> 1.2125e1 이걸 지수표기한것이고 e가 지수이다. 지수는 클필요가 없으니 8비트로 줄이고 나머지를 23비트로 가수부로 넣고 정수와 소수가 같이 사용한다.
그래서 더 유연해진다. 일단 정수를 12.125-> 1100.0010 2진수로 바꿔야 한다. 이걸 1.11000010e3으로 지수표현한다. 이런식으로 만든다.
그래서 float는 -3.402823466E + 38 ~ 3.4028234566 E + 38범위가 된다.
중요하지 않지만 이런게 있다를 알아놓자.

14. 자바 변수 선언

자바에서는 변수를 사용할때 막사용하면 안되고 규칙을 지켜야한다.
모든 키워드는 선언하고 사용해야만한다.
1.kor(선언)
2.어떤 범주로할건지 정해줘야함. 변수 함수 참조변수 ... -> int, void() , Animal...등 이 기호를 뭘로 할건지가 선언이다.
변수라는 것은 값을 담는 그릇임 물리적으로 공간을 한정할 필요가 잇다. byte/int/float kor = 3; 한정사가되고 공간에 한정하게 된다.
변수라는 것을 선언할때 값을 대입하는데 꼭 값을 대입할 필요는 없고 기본값이 잇을때 값을 넣어주면된다. 이런 경우를 변수값을 담으면서 선언하는것을 변수 초기화라고 한다.

변수 명명 규칙
1.영문자시작 2.공백불가 3.특수문자사용불가
여러변수를 한번에 선언하기 자료형이 같다면 int kor1, kor2;이런식으로 선언가능

15. 출력 스트림 객체와 API

출력을 위한 api가 어떤게 잇나? 언어는 자바도 언어내의 범주는 가지고 잇지않다. 언어는 계산이나 흐름제어등을 한다.
출력이나 입력 이런것은 플랫폼 재료를 사용해야한다. 이것을 인터페이스를 이용해서 사용한다. 이 인터페이스는 함수형식이다.
절차언어 고급언어 -> 프로그램 다양한재료 -> api -> 플랫폼 카톡 페이스북 모니터 등등
api를 거치는데 각각 맞는 api를 사용한다. 키보드나 하드디스크에 출력하기 위한 api는 printf() fprintf()등이잇다.
자바도 이럼 함수를 가진 플랫폼이 잇다. 콘솔 출력하기 위한 것
출력 System.out.wirte / System.out.print / System.out.println / System.out.printf("%d,30);
입력 System.in.read();, System.in.skip();, System.in.reset();
System.out System.in이라는 Stream 객체를 사용해야한다.

출력 스트림 (output stream)을 이용한 비동기 처리
장치하나를 두고 여러 어플리케이션이 출력하려고 싸움 가장쉬운건 줄세우기 동기화 하나씩 가기
그런데 동기화하면 지금 출력할수잇는애만 일하니가 먹통이된다. 그렇다고 해서 줄세우기를 안할수없음.
그걸 위해 만든것이 버퍼이다. 미리 넣어놓고 한번에 출력 동기화를 비동기로 처리하면서 해피하게 만듬. 출력버퍼 누군가 이 출력버퍼를 순서를 매겨준다.
이것이 실행환경이고 자바는 이런 실행하기 위해 자바가 가지고 있다. 이 출력버퍼가 OutputStream이다. 이 stream은 단방향 버퍼이다.
출력버퍼에 출력하고 이 출력버퍼가 stream이고 이것이 모니터에 전달한다. 출력버퍼는 개체를 사용하는게 아니라 객체를 사용해야한다.
개체(entity)와 객체(object)
우리는 무엇을 요구하든 객체가 필요하다. 객체는 실존하는것 실체이다.
이 실체가 잇기 위해서 사용되는 타입이 entity이다.
자동차를 산다고 하면 자동차 브로마이드를 볼것이다.
차 a종류를 골랏다. 이런 형식을 원한다 라고 골랏다. 이타입을 원한다고 한것이고 이걸 공장에서 만들어줘서 가져다주면 객체이다.
객체는 실존이지 타입이라고 할 순 없다. 이 객체에 이름을 달아줄수잇다. Entity 쇠돌이 = object가 되는 것이다.
그래서 우리는 출력하기 위한 출력버퍼의 개체명은 outputstream이고 실제사용하려면 객체를 생성해야하고 이것이 out이다.
이 객체를 누가 만들어달라고 햇어야햇다. new 연산자를 해서 만든다. 그런데 콘솔입출력 객체명은 자바플랫폼이 이미 만들어 두었다.
꼭잇어야하는게 콘솔 입출력인데 이것을 직접 만들필요가 없다. 그래서 여기에 write함수같은 것쓰는것이다.
그래서 객체명을 앞에 사용하고 out.write로 쓰게 된것이다.

16. 콘솔 출력과 문자코드

입력하거나 출력할때 버퍼를 사용하고 단방향의 stream이다. 이stream어떻게 값이 담겨이는지를 알 필요가 있다.
어떤 값이 들어가나?? 2번키를 누르면 숫자2가 들어가나?아님. 숫자 2는 그저 보기좋게 라벨링한 라벨일뿐이다.
키보드에 키는 키를 식별하기 위한 일련번호가 있다. 이것을 식별하는 번호를 keycode라고 한다. 숫자 2 는 50번이다
출력될때도 keycode로 나온다.
그런데 keycode가 모든 문자를 대변하지 않는다. 그래서 미국에서는 영문자를 포함한 언어들을 ASCII코드라는 것으로 만들었다.
시작번호가 0 그턴호가 127 비트로 7비트의 맥스번호임. 7비트로 표현할 수있다. 비트하나만더하면 128~255 까지 표현할 수있다.
8비트 아스키표
그러면 한글 중국어 이런거 어떻게 사용하나? ASCII에 추가로 한글을 넣엇는데 이게 EUC-KR이다. JP는 EUC-JP / CN은 EUC-CN
우리는 그런데 앞에를 동일하게 사용하는데 벗어나느 것은 선택적으로 사용해야한다.
만약 코드번호 C8B00F가잇을때 일한 다다르게 표현해서 같은 페이지에서 각 언어를 한꺼번에 볼 수 없게 된다.

그래서 UNICODE 가 만들어졋는데 ASCII+KR+JP+CN등등이 추가가 되잇는것이다. 전세계각국을 추가해놧다.
System.out.write(3)을 담앗다. 주사시켜달라고 System.out.flush()해줘야한다.
그러면 3이 출력되나? 아님. 코드로 해야함 System.out.write(51) System.out.flush()해야함.
3이 51인것을 어케알앗나? 외워야하나? 항상찾아야하나? 유니코드는 매우 많아서 문제임.
''를 붙이면 '3' 3의 코드를 얻어내는 연산을 한다.System.out.write('3');

System.out.write('3'+1);
이건3이라는코드에 +1 을해서 4가된다. 코드값에 값을 더하는거임. 백준문제풀때 'C'-?해서 자기 숫자 얻어냇던거랑 비슷한듯.

17. 콘솔 문자열 출력 - PrintStream

write로 문자출력햇는데 이 개수만큼 write를 해야한다. 그리고 이때마다 flush()를해야한다.
그런에 대부분 출력할때 문자하나씩 출력보다는 문자열을 출력한다. "Hello"
이 outputstream을 하는 write() / flush()가 잇는데
이것을 반복적인 작업을 대신하는 응용된 함수인 print() / printlm)() / printf()가 있다.
이것은 System.out = new PrintSteam(new OutputStream());을 응용한것이다.
--------> 독학할때 햇던 보조스트림 이야기 기능을 더많이 가지고 있음.
System.out.print("hello"); 문자열을 출력할 수 있고 실수같은 경우에도 그냥 넣으면 알아서 뽑아줌.
당연한거 아닌가?라고 생각하면 이해를 잘못하고 있는 것임. 3.45 같은경우 3 . 4 5다 하나씩 변환해줘야한다.

System.out.print는 오른쪽에 여분이잇으면 내려쓰기가 아닌 오른쪽으로 계속 출력한다.

18. Escape 문자

성적을 출력햇는데 오른쪽으로 쭉 출력됫다. 이걸 원하는게 아니다.
내려쓰기를 해야한다.
이스케이프문자


개행하는 명령어가 n인데 그냥 넣으면 문자로 인식한다. 이것을 출력할 인식문자에서 벗어나서 명령어로 인식하도록 escape문자 \를 넣어준다.
\n하면 명령어로 인식되게 된다.
역슬래쉬를 넣고싶다면 ? 역슬래쉬를 두번써주면 특별한값이 아니라라고 표현할 수 잇다.

그런데 개행하는 일이 너무 많음. 개행이 포함된 print함수가 생겨낫다.
System.out.println("│ 성적출력 │");이렇게 하면 알아서 개행해준다.

기본적으로 println을 사용하고 경우에따라 print()를 사용하면된다.
문자열사이에 '이나 "를 넣고싶어도 escape문자가 필요하다.

\n은 다음 행으로 가지는 것임 그래서 \r을 항상 다시 써줘야햇엇다.
그런데 이제는 필요없다. 파일 출력할때는 같이써야할때가 있다.
영수증같은경우엔 \f이런게쓰일수도잇다.

19. format과 숫자 출력 - printf

숫자를 출력하려면
System.out.print(80); 원래대로면 "80" -> "8", "0"->(56,48)-> 8/10+48, 0+48 햇어야햇다.
print가 숫자를 넣으면 문자로 그대로 표현하게 해준다.

System.out.print("\t국어1 :");
System.out.print(kor1);
System.out.println();

이렇게 출력하면 너무 불편하다.

같이 표현하는 방법이 없을까?
Sytem.out.printf();이다. 2023-02-09에서 - -를 기반으로 숫자만 넣고싶다.
Sytem.out.printf("%d-%d-%d", 2023,02,09);
숫자를 포맷하고 쉼표로 사이사이로 넣을 수 있게 하면 된다. 첫번째가 첫번째 위치 이런식으로 들어간다.
실제 할때는 포맷핑 할때 다양한 코드들이 있다.
사진참조
10진수 16진수 8진수 다잇다. 나중에 필요할때 형식 지정자를 검색해서 사용하면된다.
우리는 보통 문자열 %s 문자 %c 정수 %d 실수%f만 알면된다.

System.out.printf("\t국어1 : %d\n", kor1);
System.out.printf("\t국어2 : %d\n", kor2);
System.out.printf("\t국어3 : %d\n", kor3);
System.out.printf("\t총점 : %d\n", total);
System.out.printf("\t평균 : %f\n", avg);

개행하는것 잊지말아야한다.

20. 형식지정자 옵션

틀을 마련해놓고 그리드에 출력할때 칸에 크기를 맞춰야한다. 만약 두자리에 맞춰서 그리드를 만들엇으면 밀려나게 된다.
그래서 출력할대 자리수를 다 지정 해놓아야한다.

이때 사용하는게 형식 지정자이다.

%시작/ argumentindex 1 $ /+or-정렬/자리수 너비-숫자/소수점 자리수 .숫자 /d형식
+면 우측정렬 -면 좌측정렬
자리수 너비(minmum) 넘어가면 알아서 늘어남.
숫자 넣으면 소수점 자리수 몇개까지 표현할것인지

System.out.printf("\t평균 : %.2f\n", avg); //63.00
이러면 6칸을 가지고 소수점 2째자리수까지 표현하는 것임.
원래대로면 숫자마다 갯수가 잇고 순서를 맞춰야한다.
argumentindex는 융통성잇게 해주는 것이다.

System.out.printf("%2$d, %3$d. %1$d\n", 1, 2, 3);하면 2 , 3 ,1이 출력된다.
System.out.printf("%1$d, %1$d. %1$d\n", 1); 하면 모자라서 오류가 나는게 아니라 똑같은 값을 세번출력할 수 있다.

정수를 정수로 나누면 정수가 나온다. 그래서 실수를 실수로 나누던지
avg = total / 3.0;을 해줘야한다. 정수를 더블로 바꿔주고 계산이 되게 된다.
우선 avg = (float) total / 3.0;하면 total만 float이되고 더블로 나누게 된다. 이럼오류
avg = (float) (total / 3.0); 이렇게 해주면 된다.
avg = total / 3.0f;아니면 하나를 float로 바꿔주면된다

21. 콘솔 입력하기(System.in, Scanner)

콘솔입력객체는 System.in이다. 버퍼에 담아주는 것임. 키코드가 담긴다.
이걸 읽기위해 rad() skip()을 해야한다.
int code = Sytem.in.read();하면 도 ascii값이 나온다.
또 코드인식해서 출력을 한다.
그런데 문자를 하나씩 읽어서 출력하는 일은 별로 없다. 또 코드값을 사용하는 일도 별로 업다.
이것을 문자형태로 읽어주는 nextLine()이 있다.next() 또는 가끔 스페이스로 구분해서 읽어오고 싶다.
숫자라면? 숫자로 변환해야하는데 nextInt() nextDouble() nextFloat()가 잇꼬 이것들을 다 불러오는게 Scanner이다.
Scanner scan = new Scanner(System.in);
이것은 이런 기능을 제공하는 객체가 된다.

System.out.print("국어1:");
kor1 = sc.nextInt();
System.out.print("국어2:");
kor2 = sc.nextInt();
System.out.print("국어3:");
kor3 = sc.nextInt();

그냥 입력하면 헷갈리니 라벨을 같이 넣어주자.

22. 연산자

22.1 대입연산자

= 가 있다.

22.2 산술연산자

+ - * / %

연산자의 우선순위 사칙연산과 같음. ()가 먼저됨

연산자와 자료형 자료형이 같아야 한다. 한쪽에 알아서 맞춰줌. 손실되지 않도록 변환하자.

나머지 연산자
/는몫이고 %가 나머지이다.
10 / 3 = 3 정수를 정수로 나누어으니 정수가 나옴.
10 % 3 = 1임
%어디에 쓰나? 값 연속된걸 나머지 0인애 나머지1인애 나머지2인애나눠서 넣고 싶다.이럴때 사용함.
특정범위내로 가둘때 사용함.

22.3 단항연산자

+양수연산자 -음수연산자 ++증가연산자 --감소연산자 !부정연산자

i++과 ++i의 차이점. ++i는 증가시키고 출력 i++는 연산이 끝나고 증가시키는 것임.
문장내에서 한번에쓸때는 순서를 잘 보자.

23. 비교,관계 연산자

==, != , > ,<, >=, <=
논리연산자
&&교집합 ||합집합
등등
비교연산자 는 왜사용하는가? 값의 유효성을 검사할때 사용한다.
유효한 값의 범위를 도메인이라고 한다. 이 도메인 범주안에만 들어간것들을 활용하기 위해 범주를 한다.
검사를 할때 비교를 한다.
-<x && x<=2 // 수학에서는 -2< x <=2인데 이건 안됨.

24. 비트(bit) 연산자

24.1 집합연산자

& 비트 교집합 연산자 / | 비트 합집합 연산자 / ^ 비트 차집합연산자 / ~비트 부정연산자
3 & 7 -> 0011 & 0111 -> 0011 이걸하면 비트단위로 연산한다.
거짓&거짓->거짓 거짓&참 ->거짓 참&참 ->참
거짓|참 ->참임
차집합은 차이가 있으면 참임 참^거짓 -> 참 참^참->거짓
~3 -> 0011-> 1100으로 뒤집어준다.

24.2 시프트 연산자

<< 왼쪽시프트 >> 오른쪽 시프트 연산자 3<<개수 몇칸을 시프트 할것인지
3 << 2 -> 0011 << 2 -> 1100 -> 12
왼쪽으로 밀때는 0으로 채워지고 오른쪽으로 밀때는 밀려난 숫자로 채운다.
1101 >> 2 -> 1111

이딴거들 어따 사용하나??
한변수에 두개의 값을 대입할때
옛날로 거슬러감 오목판 x,y좌표잇는데 커봣자 각각 100이라 32비트 * 2로 저장하면 낭비임
x와y를 16비트에 두개를 한꺼번에 담아서 보내서 절약함.
x - y가 잇는데 y쪽에 먼저 채워져버림

25. 복합 대입 연산자와 연산자 우선순위

복합대입연산 += -= 등등


대부분이 가능하다.

3항연산자 (조건) ? 1 : 2
조건이 참이면 1 거짓이면 다음거로 간다.

연산자 우선순위는 써보면서 알자.

26. 제어구조(Control)

제어구조는 프로그래밍에서 가장 중요한 것이다.
컴퓨터 프로그램은 반복을 기본으로 한다. 프로그램은 반복적으로 연산하려고 만든다.
흐름제어하려면
선택문 if else elseif
반복문 while, do while, for
분기문 swich case 등이잇다.
흐름은 원래 1자로 되잇는데 이걸 반복하게 하거나 돌아갈수잇도록 할수도잇다.
이안에서 선택을 할 수도 잇다.

수행절차를 제어할 수잇다.
성적입력-출력부분을 반복할 것이다.

while(true) {

//-------성적입력부분------------------------------
System.out.println("┌──────────────────────────┐");
System.out.println("│          성적입력        │");
System.out.println("└──────────────────────────┘");
System.out.print("국어1:");
kor1 = sc.nextInt();

System.out.println(0<=kor1 && kor2<=100);

System.out.print("국어2:");
kor2 = sc.nextInt();
System.out.print("국어3:");
kor3 = sc.nextInt();

//-------성적출력부분------------------------------

total = kor1 + kor2 + kor3;
avg =  total / 3.0f;

System.out.println("┌──────────────────────────┐");
System.out.println("│          성적출력        │");
System.out.println("└──────────────────────────┘");

System.out.printf("\t국어1 : %3d\n", kor1);
System.out.printf("\t국어2 : %3d\n", kor2);
System.out.printf("\t국어3 : %3d\n", kor3);
System.out.printf("\t총점 : %3d\n", total);
System.out.printf("\t평균 : %6.2f\n", avg);
System.out.println("──────────────────────────");
}

실행순서를 반복하게 되엇다.
그런데 강제종료 너무 귀찮음. 물어보면서 하는거 = 선택문

2023.02.09 후기

혼자 공부하면서 어렴풋이 객체라는 것을 알게되고 system.out도 그걸 사용해서 하는 것을 어렴풋이 이해하고 있엇는데 자세하게 원리를 알게 되엇다.
이런 기본을 또 들을지 말지 고민햇엇는데 듣기로 한게 잘한 것 같다. 이런 원리를자세하게 배울일은 별로 없을 것이다. 책에서도 대충넘어간 내용임. 책을 병행하면서 하면될듯하다. 자바한바퀴 돌리고 다음공부간다고 늦지 않을 것이다. 자바가 제일 일단 중요하다.
이런 원리를 배울때 제일 설레는 것 같다. 문과라 그런가? 원리배우고 실제로 뭔가 만들어졋을때 설렌다. 지금 단순히 이론만 배우니 멘붕오는 거인듯하다.
중요한 것은 꺾이지 않는 마음

+ Recent posts