2020-04-04 TIL
04 Apr 2020 | TIL계획수행표
| 계획 | 수행 |
|---|---|
| 프로그래밍 언어론 수업 | O |
| 이것이 자바다 예외 파트 공부 | △ |
| 알고리즘 과제 최소 절반 해결하기 | △ |
| 알고리즘 1장 복습 | O |
| 수행도 | 80% |
Today I Learend
프로그래밍 언어론
- regular grammar의 뜻과 finite-state machine의 개념을 간단하게 배웠다.
- 명령형 언어들은 추상적임. (폰노이만 구조 위에서)
- Name : 변수 뿐만 아니라 함수, 인자 , 다른 구조체에서 주 속성으로 쓰임.
- design issues for names : case sensitve한가? 예약어를 사용하는가?
- length : 길이는 어느정도 인지, 길수록 코딩 자유도가 높아지지만 컴파일러 부담이 커진다.
- form : 문자,숫자,_로 구성 ( 숫자는 처음에 나올 수 없음 ) 언어에 따라 문자의 타입을 name에 넣어야하는 경우도 있다.(Perl)
- case sensitivty : 대 소문자를 구별하는가?? <- 보는 관점에 따라 가독성이 떨어진다 높아진다 의견이 분분함.
- special word : 특수한 역할을 하는 이름. 너무 많아도 문제 적어도 문제
- variable : 메모리 셀을 추상화한 것. 6개의 특성을 지님
- Name
- Address : 변수가 연관되어 있는 주소(C의 포인터) , L-VALUE라고도 함. (assignment(=)의 왼쪽에 위치하기 때문), 두 변수가 똑같은 address를 참조할 경우 이를 aliases 라고 한다.
- Type : 변수에 어떤 범위의 값들이 들어갈 수 있는지 지정함
- Value : 변수의 값 ( R-VALUE 라고도 함. )
- Binding : 변수와 변수의 타입의 연관, 연산과 symbol 사이의 연관 등 값과 값의 속성 사이를 연관시키는 것을 의미. 일어나는 시간에 따라 static, dynamic으로 나뉨.
- Static binding time : 컴파일 이전에 결정되는 binding time
- Language design time : 언어에서 허용되는 대부분의 자료구조나 프로그램 구조를 확정.
- Language implementation time : 언어를 정의할 때 이루어진 형태( 값의 범위, 표현가능 자리 수 등 )에 대한 binding
- Compile time : 변수와 타입 사이의 binding
- Dynamic binding time : 실행 중에 일어나는 binding time
- Load time : 변수를 메모리 셀과 binding
- Runtime : 실행 시간에 일어나는 binding. 변수의 값 확정과 변수에 기억장소 할당.
- 1990년대 중반 이후 하드웨어 속도의 증가와 유저의 편의성 필요로 dynamic type binding의 프로그래밍 언어들이 많이 등장 (JS,python,ruby,php 등
- 장점 : 프로그래밍 자유도가 높다. generic program이 가능하다.
- 단점 : 보통 인터프리터 형식이므로 하드웨어 자원을 많이 먹고 에러를 실행하기 전에 잡아주지 못한다.
이것이 자바다
- 예외의 종류에는 일반 예외와 실행 예외가 있다. 일반 예외는 컴파일 하기 전에 예외를 파악해 에러를 출력하고 실행 예외는 컴파일 할 때는 에러를 출력하지 않고 해당 문제가 발생했을 때 에러를 출력한다.
- 예외는 java.langException 의 파생클래스로 이루어짐. 이중 RuntimeException은 실행예외를 뜻함.
- 실행예외의 종류
- NullPointerException : null 값인 포인터를 참조해 .를 사용했을 때 발생.
- ArrayIndexOutOfBoundsException : 배열의 최대 인덱스를 벗어나는 인덱스를 참조했을 때 발생.
- NumberFormatException : 문자로 이루어진 문자열을 숫자로 바꾸려 했을 때 발생. parseInt할 때 주로 발생
- ClassCastException : 잘못된 클래스 캐스팅을 하려 했을 때 발생. 주로 상위클래스, 하위클래스 나 인터페이스, 구현 클래스 간에 발생
- try, catch, finally로 예외처리 가능
- try 구문 안에 예외를 검사할 코드 삽입
- catch의 인자 안에는 검사할 예외 클래스 타입을 삽입하고 본문에는 예외 발생 시 할 작업을 삽입
- finally는 에러가 발생하든 안하든 무조건 발생해야하는 작업 삽입.
알고리즘
- 빅 오 표기법과 같이 시간복잡도의 여러 표기법에 대해서 배웠다.
-
빅 오 표기법 : O(g(x)) = { f(x) ∃c > 0 , x0 >= 0 s.t. ∀x >= x0 , f(x) <= cg(x) } -
빅 오메가 표기법 : Ω(g(x)) = { f(x) ∃c > 0 , x0 >= 0 s.t. ∀x >= x0 , f(x) >= cg(x) } - 빅 쎄타 표기법 : Θ(g(x)) = Ω(g(x)) ∩ O(g(x))
- 이를 증명 할 때에는 위를 만족하는 상수 c와 x0 가 존재함을 보이면 된다.
느낀점
- 주말이라 진도도 거의 다 끝나서 복습을 진행하였다. 복습을 진행하면서 여러 모호했던 알고리즘 개념들이 잡히기 시작했다.
- 이번 주부터는 과제가 조금 잡히기 시작했으므로 과제를 하나 하나 끝내가면서 강의를 진행해야겠다.
- 10일 까지 알고리즘 과제를 끝내야 되기 때문에 6일날 알고리즘 과제를 해결할 것을 목표로 한다.
- 13일 까지 이산수학 과제를 끝내야 되기 때문에 6일 이후부터 이산수학 과제를 실시한다.
Comments