ITWILL : JAVA SE/EE/ME 차이점, JAVA EE 설정. Tomcat 설치및설정
ITWILL학원 : 4강 JS기초 BY 정규태강사
ITWILL학원 : 4강 JS기초 BY 정규태강사
document.write();
console.log();
alert();
1 | let a = 100; |
예제문제를 푸는데 나는 두가지 방법이 떠올라서 두가지방법으로 풀어보았다
예제문제
Math.floor를 사용하여 세자리 숫자를 연산하면 100의 단위로만 나타내세요
input 456
output 400
1 | let num3 = 778; |
변수에 데이터(값)을 저장하는 연산자
ex) A = B ; 연산의 방향이 오른쪽에서 왼쪽이다
복합대입연산자는 산술연산자에 복합연산자를 함께 사용하는 것으로 그 예에는 +=, -=, *=, /=, %=
가 있다
ex) A += B; <=> A = A + B;
ex) A -= B; <=> A = A - B;
ex) A *= B; <=> A = A * B;
복합대입연산자를 활용해 테이플을 편하게 만들 수 있다
1 | let name = "곽두팔"; |
물론 HTML로 만드는 것이 훨씬 편하지만…ㅋㅋㅋ
변수의 앞, 뒤에서 사용하며 값을 1증가 또는 1감소
1 | let A = 100; |
세미콜론의 위치때문에 1번과 2번의 값이 차이가 생겼다
++A는 A의 값을 변화시키지 않고 콘솔을 찍었고
A++은 A의 값을 1씩 더한 뒤(세미콜론찍고) 콘솔을 찍었다.
즉 변수의 값을 변하시키는 건 A++후위연산이다.
데이터를 비교하는 연산자.
연산의 결과는 boolean 으로 나온다.
<, >, <=, >=, ==, !=, ===, !==
1 | num1 = 10; |
왜 서로 값이 다르게 나올까?
==
: 데이터의 값만 서용해서 비교===
: 데이터의 값 + 데이터의 타입을 모두 비교 (높은 정확도)참고로 위의 개념은 js에만 해당됨
총 3가지의 연산자가 있다
&&
AND 두개 넣어서 AND연산자||
버티컬바 두개 넣어서 OR연산!
느낌표 넣어서 NOT연산논리연산자진리표를 꼭 기억해야한다.
JAVA와 이름은 비슷하지만 어떠한 연관성도 없는 언어이다.
JS 특징
스크립트 언어 - 어플리케이션에 명령을 전달하기 위한 것.
Compile VS Interpreter
둘 다 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
라이브러리란 특수한 기능을 모아놓은 것을 말한다
ex) jQuery, Ajax, JSON
자바는 서버에서 사용되는 언어이다. 서버에서 처리를 한 후 돌려줘야 한다.
반면 JS는 서버가 아닌 클라이언트에서 처리된다. 그래서 서버의 부담이 줄어든다
그렇다면 전부 JS로 하면 안될까??
하지만 JS에 한계가 있기 때문에 서버의 언어와 클라이언트의 언어를 같이 사용하게 된 것이다.
항상 대/소문자 구문해서 사용한다.
아래 코드는 같은 의미를 가지고 있는 것 같지만 출력값은 다르게 출력된다
1 | new Date(); |
실행문을 끝낼때 항상 ;을 사용한다.
세미콜론이 없이 실행가능할 수 있지만 실행중에 문제가 발생할 수도 있기에 붙이는 것을 권장한다
사용자(개발자)의 편의성을 위해 한 줄에 하나의 문장을 작성한다.
큰 따옴표와 작은 따음펴 사용에 주의한다
""
는 String만 가능, ''
는 char만 가능1 | // ex) |
만약 하나의 공간에 다른 데이터를 추가적으로 넣게되다면?
새로운 데이터가 들어올 시 기존 데이터에 덮어쓰여지게 된다.
저번시간에 꼭 기억해야하는 한 문장이 있다고 했다
바로 모든 프로그램은 주기억장치에서만 실행된다!
다만 경우에 따라서는 1번 선언과 2번 초기화를 같이 진행할 수도 있다.
- 변수 선언만 한 경우 : var 변수명;
- 선언과 초기화 같이 하는 경우 : var 변수명 = 값;
아래를 출력하면 언디파인드가 뜨는데 consol창에는 아무메세지도 나타나지않는다
즉 에러가 아니다
1 | let tmp |
왜 이런 현상이 일어날까?
메모리가 할당된 tem안에 값이 없기때문에?
tem안에 값이 있는지 없는지 모르기때문에!
이게 무슨 양자역학같은 소리냐면…
메모리는 유한하다. 8기가나 16기가 등등.
컴퓨터는 여러 작업을 하면서 한정된 메모리안에서 데이터를 썼다가 지웠다가를 반복한다.
재사용된 메모리위치에 아직 쓰레기값이 들어있을 수도 있다.
내가 대입하지 않았더라도 어떤 쓰레기값이 들어가 있을수있기때문에 undefined가 나온 것이다.
따라서 변수선언 후에는 항상 초기화를 해줘야된다.
var타입은 객체타입이라고 한다. 모든 타입을 저장할 수 있다.
비교하자면, java의 변수선언은 정수인 경우 int num = 1이라고 하지만 js는 데이터타입을 정의하지않고 변수를 선언할 수 있다.
오늘은 꼭 알아야하면서도 엄청 중요한 개념이라고 할 수 있는 클래스의 self, 클래스, 인스턴스 변수에 대해 공부해보자
self 매개변수의 유무에 따른 차이를 아래 예시를 통해 확인해보자
1 | print() |
이제 function1을 호출해보자
1 | # self_Test.function1() |
function1은 클래스매서드이기에 그냥 출력하면 타입에러가 발생한다
아래와 같이 출력해야한다
1 | SelfTest.function1() |
잘 출력되는 것을 확인할 수 있다
self매개변수를 선언한 함수는 어떨까?
1 | self_Test.function2() |
두번째 방법의 타입에러를 해결하려면 아래 이미지처럼 하면 된다
터미널을 확인해보면 id값이 일치하는 것을 확인할 수 있다.
클래스변수는 self가 없고 인스턴스변수는 self가 있어야한다
클래스변수는 공용으로 쓸 수 있다
1 | print() |
그리고 유저1과 유저2 그리고 웨어하우스의 네임스페이를 확인해보자
1 | print(user1.__dict__) |
이를 통해 유저1과2에는 이름밖에 없고 웨어하우스에 stock_num이 있다는 것을 알수있다
만약 유저안에서 stock_num을 찾는다면 어떻게 될까?
1 | print(user1.stock_num) |
만약 유저를 한명 더 추가한다면 아래와 같이 출력된다
네임스페이스안에 이름밖에 없었기때문에 stock_num을 못찾을것같지만 인스턴스는 자신의 네임스페이스에 없으면 클래스의 네임스페이스에서 찾아서 불러온다
이러한 점을 이용하여 연봉인상율같은 계산등에 활용할 수 있다.
데이터타입을 명시적으로 알려주는 역할을 한다
위의 사진에서와 같이 x : int의 의미는 x는 int형만 와야한다는 의미이고
-> list: 는 리스트형태로 출력될 것이다라는 의미이다.
패키지를 통해 해당 함수를 다른 파일로 빼놓을때 유용하게 사용할 수 있다.
1 | def tot_length1(word: str, num: int) -> int: |
람다식의 장점은 메모리 절약, 가독성 향상, 코드 간결해진다
함수와 람다의 차이점은
위의 이미지는 우리가 일반적인 함수를 변수에 할당하는 방법이다
var_func이란 변수에 우리가 만든 def를 대입하면 터미널에서 볼수있듯이 메모리에 할당되어있고 type은 function이다.
1 | print() |
1 | print() |
동일한 결과값이 출력되는 것을 확인할수있다.
좀 더 나아가 활용할 수 있는 방법이 있다
함수를 매개변수로 받는 방법이다
위에서 만들었던 lambda_mul_func
를 이용한 함수를 만들었다.
1 | print() |
만들어놓은 람다함수 사용하지않고 즉시 람다식을 넣어서 인자로 함수를 넘길 수 있다
None은 더이상 출력할 값이 없어서 출력되는 것임.
1 | print(func_final(10,10, lambda x : x * 10)) |
먼저 클래스를 사용해야 할 이유에 대해 알아보자
방대한 어플리케이션이 운영하기 위해서는 클래스방식의 코딩을 해서 구조화를 시키고 결합을 느슨하게 해서 유지보수에 용이하게 한다.
클래스선언시 첫글자는 대문자여야한다.
클래스는 속성과 매서드로 구분된다.
클래스(객체), 인스턴스 차이는 매우 중요하디
아래는 클래스를 인스턴스 변수로 사용한 예이다.
1 | class UserInfo: |
함수식과 람다에 대해 자세히 알아보자.
우리가 함수를 사용하는 이유는 반복적이고 중복되는 프로그램을 방지하기위해서다
아래처럼 하면 끝!
1 | def 함수명(parameter): |
여기서 def는 define의 약자이다.
함수를 호출하는 방법은 함수명() 이고 만약 parameter가 있다면 함수명(parameter)로 호출하면 된다
1 | def hello(world): |
함수를 선언할때는 선언 위치가 매우 중요하다
파이썬은 항상 위에서부터 아래로 실행되기 때문이다
위의 예제에서 아래 사진처럼 선언 위치를 바꾸면 터미널에 NameError 뜨는 것을 볼 수 있다
hello라는 이름이 정의되어 있지 않다는 에러이다.
리턴이라는 예약어를 통해서 함수를 출력할수도있다
아래 예제를 보자
항상 형변환을 주의하자
1 | def hello_return(world): |
다중리턴을 사용하면 짜임새있는 함수를 만들 수 있다.
java나 기타언어들은 return값이 하나인 게 원칙인데 파이썬은 다르다
파이썬은 다중리턴을 허용한다
1 | def func_mul1(x): |
파이썬의 매력적인 부분은 return값의 데이터 타입 변환이다.
왜냐면 엄청 간단하고 쉽기때문에
위의 예제에서 return의 데이터형태는 int(정수)이다.
만약 데이터형태를 int가 아닌 다른 형태로 나타내고 싶다면 어떻게 하면 될까?
만약 데이터형태를 리스트로 받고싶다면 return[y1, y2, y3]를 적어주면 끝!
만약 튜플로 받고싶다면 return(y1,y2, y3)로 하면 끝!
만약 딕셔너리로 return받고싶다면?
1 |
|
정말 저세상 간단함!
정말 매력적인 언어다!
*args
, **kwargs
이해*args
(아스타)*args
라고 적지만 이 매개변수명은 자유롭게 변경 가능하다1 | def args_func(*args): # 매개변수명 자유롭게 변경 가능 |
만약 출력값을 여러줄 나오는게 싫다! 한 줄로 나타내고 싶다면?
print(v, i)를 print(‘{}’.format(i), v, end=’ ‘)로 바꿔주면 된다
1 | # 출력값은 |
만약 *args
와 range()
를 같이 사용하면 어떻게 될까?
1 | def args_range(*args): |
1 | def kwargs_func(**kwargs): # 매개변수명 자유롭게 변경 가능 |
딕셔너리형태말고 한 줄에 주르륵 출력하고 싶으면
print(kwargs)를 print(‘{}’.format(v), kwargs[v], end=’ ‘)로 바꿔주면 된다
1 | # 출력값은 |
*args
와 *kwargs
의 혼합아래 터미널처럼 가변인자(args와 kwargs)는 없이 int 10과 20만을 넣어도 출력이 되는 것을 알 수 있다.
가변인자는 값이 없기때문에 빈 튜플과 빈 딕셔너리가 출력된다.
1 | def example(arg_1, arg_2, *args, **kwargs): |
실습을 하면서 궁금했던 점은 어떻게 튜플과 딕셔너리를 나누는 지 궁금했는데 완전 초보적인 생각이었다
딕셔너리형태인 address=뭐시기
를 넣으면 자동적으로 **kwargs 로 출력된다.
만약 딕셔너리 형태를 순서를 섞어 놓으면
1 | example(10, 20, address="Busan", 30, 'park', age1=77, age2=80 ) |
아래 이미지와 같이 SyntaxError가 발행한다.
전체적으로 쉽게 설명한 참고링크1
말그래도 함수안에 함수가 있는 것
중첩함수를 잘해둬야 클로저를 잘 해결할 수 있다
클로저를 나아가서 Python decorator도 중급자에서 필수적인 내용이니 꼭 이해하자
1 | def nested_func(num): |
혹시 함수안의 함수 func_in_func()를 실행시킬 수 있을까?
1 | func_in_func(1) |
정답은 실행불가!
아래 이미지처럼 Name Error가 발생한다
WEB(HTML, CSS)을 담당하며 일주일에 1번 4시간 수업
HTML은 웹페이지를 만들어 주는 프로그래밍 언어이며 웹페이지의 구조를 담당한다
enter나 space bar(2칸 이상)는 명령으로 해결한다.
!DOCTYPE html
의 의미는 html5 문서임을 선언<pre>태그
<pre>태그
는 html문서안에서 <p>
나 <br>
를 쓰지않아도 html상의 Enter나 Tab, Space를 다 표현할 수 있기때문에 긴 문장등을 표현할때 굉장히 효율적으로 사용할 수 있다.
더불어서 자동적으로 모든 문자의 width 간격을 일치시켜준다
ex) i와 w의 크기가 같다
1 | 만날 수 없어 |
위 내용을 html상에 적고 브라우저로 열어보면
1 | 만날 수 없어만나고 싶은데이런 슬픔처음인걸말할 수 없어말하고 싶은데속마음만 들키는 걸 |
우리가 원하는 건 이게 아니다!<p>
와<br>
태그를 이용할 수 있으나 여간 귀찮은 일이아니다.
이때 사용하는 것이 <pre>
태그이다
1 | <pre> |
특수문자(기호)표현을 위한 특수문자 태그들.
<
는 < 를 나타내고 >
는 > 를 나타낸다.1 | 이것은 <br> 태그입니다 |
각 두 줄의 코드를 동일한 값이 나오길 기대하며 브라우저 출력물해보자
아래와 같이 표시된다
1 | 이것은 |
띠용~ 그래서 이럴때 특수문자를 사용해준다
자주 사용하는 특수문자는 result 1번부터 5번까지는 기본으로 암기해야한다
1 | 이것은 <br> 태그입니다 |
// 출력물은 아래와 같다
1 | 이것은 <br>태그입니다 |
는 space bar를 넣는 태그이고 자주 사용 하지만 css를 사용하면 굳이 사용할 필요없기도 한 모호한 녀석이다.
⛹
를 하면 운동하는 사람 아이콘이 나온다. 컬러풀하고 귀여운 symbols를 확인하고 사용할 수 있다
&
는 &를 나타낸다
1 | 운동하는 사람 &#9977이 &#9748가 와서 운동을 그만하고 &#9749를 마셨다 |
출력값은 아래 이미지처럼 짜잔!
<b>태그
와 <strong>태그
의 차이점b태그 : 단순히 굵게 표시
strong태그 : 굵게와 중요한 내용이라는 표시가 내포되고있고 더불어 스크린 리더를 사용하는 경우, 음성으로도 강조해서 알려주니까 b태그보단 strong태그 이용할 것.
이와 동일하게 작용하는 것이 기울임태그이다
<center>
태그는 더이상 사용하지않으며 대신 CSS로 text-align:center
를 이용한다<hr>
태그는 구분선을 그어준다실습환경 운영체제는 Linux!
윈도우os에서도 oracle이 잘되지만 Linux위에서 DB운영
리눅스궁금했는데 다루게된다니 신기하다!
MySQL도 수업시간에 같이 배울 예정이며
다양한 DBMS중 거진 비슷하기때문에 하나만이라도 제대로 해놓으면 다른 프로그램도 쉽게 다룰 수 있다.
현재 OS가 윈도우이기때문에 가상PC환경에서 리눅스를 이용하려고 한다.
가상머신을 운영할수있게 도와주는 프로그램이있다 : virtual box, ubuntu 등등
아래 사진처럼 파일 > 환경설정 > 입력 > 가상머신 > 호스트키조합을 설정해준다.
이는 가상PC에 마우스가 들어가면 빠져나올 수 있는 세팅이라 꼭 필요하다!
이걸 세팅안하고 가상환경시작하면 가상환경 나올땐 컴터 강제종료밖에………
Oracle은 엄연히 말하면 DB가 아니라 DBMS이다. 즉 DBMS의 한 종류가 바로 Oracle이다
ex) Oracle, MySQL, Tibero(티베로)
시중에 나와있는 DBMS는 대부분 관계형 DBMS이다 줄여서 RDBMS.
관계형DMBS란 클라이언트가 원하는 것을 요청할때 요청사항에 위치가 포함되는게 아니라 그냥 what을 요청한다 그 후 RDMBS는 어느 위치에 있는지 스스로 찾아 데이터를 가져온다
Q. 그렇다면 DBMS와 RDBMS 차이점이 무엇일까?
DBMS안에 RDBMS가 속해있음
DBMS와 달리 RDBMS는 정규화를 수행할 수 있어 데이터중복을 최소화한다
참고링크1, 참고링크2
DBMS와 소통하려면 어떻게 해야할까? 소통할 수 있는 언어를 사용해야한다.
그러한 언어가 바로 SQL이다.
크게 5개정도가 있다.