[javascript 기본] javascript의 연산자 / Dynamic typing
오늘은 javascript가 가장 많이 쓰이면서도, 욕을 먹는 이유인 Dynamic typing에 대해 알아보자
동적 타이핑이란,
라고한다 ㅋㅋ,,,
덧붙이면, 여러가지 서로다른 데이터 타입에 대해 연산이 가능해져버려서, 내가 예상하지 못한 상황에서 에러가 나지않아 더 큰 문제가 생길수 있다는 단점이 있다.
예시를 살펴보자.
먼저 text를 'hello' 라는 문자열로 저장하면 string 자료형으로 저장이 되고.
이를 1로 할당하면 다시 또 number 자료형으로 변한다.
하지만 여기서 string인 '7'과 number인 5를 더하면
javascript 엔진은 string인 '7'에 맞춰 문자열 덧셈으로 인식하고, 5를 문자열로 바꿔 '75' string 이 결과가 되고
string 타입의 '8' 과 '2' 를 / 연산에 대입하면,
javascript 엔진이 number타입에 쓰이는 연산인 / 이고, 피연산자 ( 8과 2 )의 값이 number로 변환 가능하구나!
하고 number 타입의 4로 결과를 출력하는것을 볼수있다.
이처럼 javascript는 Dynamic typing 언어이기 때문에
한번 할당한 변수의 타입이 컴파일중 여러가지 동작( 덧셈 나눗셈 대입 연산등등) 에 의해 type이 바뀌기 때문에
버그를 발생시키지 않도록 조심해야한다.
이제 연산자에대해 본격적으로 알아보자.
1. string concatenation
먼저 스트링 연산자이다. 앞에서 본것처럼, string과 string을 더하면 문자열이 합쳐지고,
string과 number를 더하면 number가 string으로 변환되어 더해지며
또 ${ } 로 변수의 문자열 변환이 가능하다.
2. Numeric operators , Increment & Decrement operator
다음은 숫자 연산자이다. 덧셈이나 곱셈 나눗셈 나머지연산등 이 있고 제곱은 **로 표현한다.
Increment & Decrement operator (증가 & 감소 연산)는 변수에 ++ / -- 을 붙여 1을 더하거나 뺴서 사용한다.
이떄 연산자가 앞에 붙으면, 연산을 바로 실행한후 사용되고,
연산자가 뒤에 붙으면 사용된후, 실행한다 예를 보면
위와 같이 ++연산이 뒤에붙어, preIncrement 값에 먼저 할당되어 2가 출력되고, counter 값은 연산이 되었기 때문에 3이 출력되는것을 확인할수 있다.
3. Assignment operators ( 할당 연산자 )
할당연산자는 일반적으로 = 로 쓰여 선언한 변수에 값을 집어넣는 연산자이다.
다음과 같이 산술 연산을 덧붙여서 사용할수도 있다.
4. Comparison operators ( 비교 연산자 )
비교 연산자는 다음과같은 기호들이 있다. 이상, 이하 표현에 주의하자
5. Logical operators ( 논리 연산자 )
논리연산자는 || 나 && 로 and , or연산을 처리해주는 연산자이다.
주의할점은 or 연산시 한값만 true여도 결과가 true이고
and 연산시 한값만 false여도 false이기 때문에
식안에 각각 true / false 가 나온순간 뒤에오는 식은 무시된다.
이처럼 맨뒤에 함수에 check() 함수에 F를 출력하는 코드가 포함되어 있는데, 콘솔에는 2번째 3번째 연산에만 출력이 된다.
1번째 연산에 첫값이 true인데, or연산이라 check()함수가 무시된것이고,
4번째 연산에 첫값이 false인데, and연산이라 check()함수가 무시된것이다.
6. equality (equal 판별 연산자)
javascript equal 연산은 두가지 종류가 있다.
하나는 타입이 달라도, 값만 같으면 equal 로 판단하는 == 연산이고
값도 같고 타입도 같아야 equal로 판단하는 === 연산이 있다.
값도 같고 타입도 같을때만 equal로 판단하는것이 더 정확하기 때문에 === 연산을 쓰는것을 권장한다.
이처럼 string 5 와 number타입 5가 == 일때는 같고, === 일때는 다른것으로 판별된다.
equal연산은 object에서 특이한 성질을 가진다.
먼저 라는 데이터 object는, 값을 메모리에 바로 할당하는것이 아니라 데이터가 저장된 메모리의 주소를 할당받는다
따라서 내용물이 완전히 같더라도 참조하고있는 주소가 다르기 때문에 == , === 연산자 모두 false를 반환한다.
반면 아래처럼 lee3 = lee1 라는 코드는 lee3 에 lee1 의 주소값을 넣는것이기 때문에 equal연산은 true를 반환한다.
7. Tearnary operator
Tearnary operator는 if를 간단하게 쓸수 있게 해주는 operator이다.
사용법은 다음과 같다.
위처럼 name 에 "lee" 가 있는 상태에서 ? 이전의 연산결과가 true면 yes, false 면 no 를 출력하는 연산자이다.
간혹 이를 계속 중첩시켜서 쓰기도 하는데 너무 많이 중첩시키면 코드의 가독성이 안좋아 지기 떄문에 주의해야한다!