말이 둘 째날이지 셋째날인 오늘 아침부터 TIL을 적는다. 어제는 너무 졸려서 그냥 자버렸는데 일어나니 8시가 넘었더라 급히 씻고 밥 먹으면서 작성하는 중이다.
파이썬과 자바, 알고리즘을 들었다. 파이썬은 앞 부분이 중복되는 부분이 많아 금방금방 넘긴 편이었지만 자바와 알고리즘이 여전히 복병이다. 자바 강의를 완강했는데 뒷 부분은 거의 생각이 나질 않아 다시 한 번 봐야겠다 하는 중.
뭐든 빠르게 기초 문법을 훑고 응용으로 들어가는 것이 실력향상에 도움이 된다는 파이썬을 강의하신 튜터님의 조언은 뭐든 완벽히 알고 넘어가야지 싶은 내 공부법에 제법 도움이 되는 조언이셨다.
문법은 기본 개념만 이해하고 필요한 것은 구글링
구글링 노하우
-키워드 검색 후 블로그 3~4개의 공통 내용을 보면 됨
변수
컴퓨터 입장에서는 메모리 공간에 올려져 있는 값을 가리키고 있는 것
문자열
따옴표 안에 들어있는 것은 전부 문자열 취급을 하기 때문에 문자열 2와 숫자 2는 다르다.
- len(문자열)
문자열의 길이를 구하고 싶을 때
- 문자열[ : 숫자]
앞의 숫자만큼 문자를 자르고 앞쪽을 출력
- 문자열[숫자 : ]
앞의 숫자만큼 자르고 뒤쪽을 출력
- 문자열[숫자1 : 숫자2]
앞에서부터 숫자 1만큼 자르고 뒤에서부터 숫자 2만큼 잘라 그 가운데의 값을 출력
-이 경우는 실행해보면서 원하는 위치 조정(외우기X)
- 키워드 중심으로 쪼개기
문자열.split('쪼갤 위치의 문자')
리스트로 결과가 반환된다.
리스트 &딕셔너리
값을 담는 방법에 대한 것
리스트
타고 들어간다고 생각하면 값을 뽑을 때 편하다.
- 리스트에 값을 추가
리스트명.append(값)
- 가장 마지막 값을 출력
리스트명[-1]
- 정렬
리스트명.sort()
- 내림차순 정렬
리스트명.sort(reverse=True)
- 내가 원하는 값이 있는지 여부 확인
result = (원하는 값 in 리스트명)
있으면 True, 없으면 False로 반환된다.
딕셔너리
순서는 상관이 없는 데이터 형식
- 딕셔너리에 값을 추가
딕셔너리명[키이름] = 값
- 키 값이 있는지 없는지 여부 확인
result = (원하는 값 in 딕셔너리명)
리스트와 동일
조건문
- elif
다른 언어의 else if 와 같은 개념- break
반복문 안에서 조건문과 함께 쓰이며 조건에 맞는 경우 반복문에서 빠져나온다는 뜻으로 쓰임
코딩 단계에서 데이터 값이 많을 때 시간을 절약하기 위해 사용하기도 함반복문
- 값이 든 위치를 받고 싶은 경우
for i, person in enumerate(people):
i에 index 값이 들어감
함수
같은 동작을 반복하는 것
이후부터는 좀 더 심화된 개념으로 처음 듣는 내용이었지만 그리 어렵지 않았다.
튜플 & 집합
튜플(tuple)
리스트와 똑같이 생겼으나 불변형으로 삽입, 삭제, 수정 전부 불가능
a = ('사과', '배', '감')
집합(set)
set(리스트)를 하면 집합이 만들어진 것으로 중복이 제거된다는 특징이 있음
교집합( & ), 합집합( | ), 차집합( - ) 구하기 가능f-string
print를 할 때 변수와 문자열을 함께 써야하는 경우 사용
print(f'{name}의 점수는 {score}입니다.')
훨씬 간결하게 사용이 가능하기 때문에 자주 쓰인다.
예외처리
- try - excpet
try에 작성된 구문을 돌리다 예외가 났을 때 오류를 멈추지 않고 except에 작성된 구문을 실행
보통 서버에서 콜을 하는 경우 사용하며 남용하게 되면 무슨 에러가 났는지 모르기 때문에 앵간하면 안 쓰는 것이 좋다.파일 불러오기
파일 분리를 하는 경우 사용한다
ex) 뼈대 파일과 함수모음파일을 분리하는 경우
뼈대 파일 안에from 함수모음파일 import *
을 작성해주면 함수모음파일 안의 모든 함수를 사용할 수 있게 된다.
특정 함수만 사용하려는 경우에는 *의 자리에 쓰려는 함수만 적으면 된다.한줄로 줄여쓰기
if문 - 삼항연산자
result = '짝수' if num % 2 == 0 else '홀수'
num % 2 == 0 이 참인 경우 짝수 반환 거짓인 경우 홀수 반환
for문
b_list = [수행문 for a in a_list]
반복할 때마다 수행문을 수행해 b_list에 넣어준다.
map
map(check_adult, people)
people을 하나씩 돌면서 check_adult에 넣어라
list(map(check_adult, people))
는 결과값을 list로 묶은 것이다.
Lamda식
함수를 간결하게 사용
한줄짜리 함수는 굳이 만들 필요없이 Lamda식을 사용result = map (Lamda person: 조건문, people)
은 이해가 잘 가지 않아 찾아볼 필요있음
함수 심화
라이브러리를 볼 때 자주 보이는 매개변수를 사용한 함수
def 함수명(a, b = 2){ }
이 경우 b에 값이 넘어오지 않으면 기본값인 2가 들어가고 값이 넘어오면 넘어온 값이 들어간다.
매개변수에 *args를 넣으면 몇개든 상관없이 받을 수 있다.클래스
물체에 물체에 관련된 속성들을 넣어두고 컨트롤할 수 있는 함수들을 붙여준 후 중앙에서는 함수만 불러 물체를 제어하는 형식으로 언제 사용하는지가 중요하다.
class 클래스명(): 필드 함수():
self는 나 자신을 가리키기 때문에 클래스 내의 필드를 사용할 때 앞에 self.을 붙여준다.
처음부터 난이도가 있어 멍하니 수업을 들었던 것 같다. 당장 써봐야지라는 엄두가 나지 않아 그냥 개념만 알고 넘어가기로 했다.
예외처리
1. 예외발생으로 실행중인 프로그램의 비정상 졸료되는 것을 막음 2. 문제가 발생했음을 개발자에게 알려 기존의 코드를 보완할 수 있게 함
자바는 상속을 통해 예외를 처리
error
프로그램이 종료되어야하는 심각한 문제를 표현하는 예외처리 방식으로 종류가 많지는 않다.
except
프로그램이 종료되지는 않지만 예외나 문제상황을 표현하거나 다루어야 하는 경우 사용하며 error를 제외한 모든 예외를 뜻하기도 함
- RuntimeException
실행 중에 발생할 수 있는 에러 표현
- IOException
파일을 다움로드 받거나 하는 상황에 발생할 수 있는 에러try - catch - finally
try
원래 실행하려는 코드를 작성
catch()
여러개 작성이 가능하고 ()안에는 어떤 Exception Class에 해당하는 지 변수 이름은 뭔지 작성하며 여러개가 작성된 경우 한 catch문이 실행되면 다른 catch문은 그냥 넘어간다. 때문에 작성 순서는 좀 더 좁은 범위인 자식 클래스가 먼저 쓰인다.
finally
필수적으로 작성하는 구간은 아니나 성공이든 실패든 무조건 실행해주어야 하는 코드들이 이곳에 쓰인다.
이 외에 try-with-resourse도 존재하나 알아만 두자
try 구문 작성 시 예외처리가 필요하면 빨간 줄이 뜨니 참고하자
throws
이 키워드를 통해 메소드에서 예외가 발생할 수 있음을 알림
메소드를 call 하는 쪽에서 예외처리에 대한 작성이 필요하다.날짜와 시간
자바 뿐 아니라 모든 언어에서 시간을 기록할 일이 많다. 로그를 남길 때 시간을 함께 기록을 해주어야 먼저 발생한 것과 뒤에 발생한 것을 구분할 수 있고 어느 시간에 발생했는지를 확인해야 어떤 문제 때문인지를 유추 가능하기 때문
LocalDate //년, 월, 일 LocalTime //시간(밀리세컨드 단위) LocalDateTime //년, 월, 일, 시간
특별한 설정이 없으면 표준 규격으로 출력된다.
- 특정 시간 출력
.of(원하는시기) 를 해주면 된다.
- 출력 방식을 바꾸고 싶은 경우
DateTimeFormatter를 사용
- 정해진 코드가 아닌 내가 원하는 형식으로 작성하고 싶은 경우
DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 hh시 mm분")
- 시간 비교
period 사용컬렉션 프레임워크
리스트, 셋, 맵 같은 자료구조를 표현하는 인터페이스로 자바를 쓸 때 계속 다루기 때문에 주의할 것
1. 리스트
순서가 있는 데이터의 집합, 데이터의 중복을 허용
2. set
순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용 안 함
3. map
파이썬의 딕셔너리와 동일한 형태로 키와 값이 쌍으로 이루어진 데이터의 집합으로 순서가 없고 키의 중복을 허용하지 않으나 값은 허용된다.
4. stack
마자믹에 넣은 데이터를 먼저 꺼내는 구조(LIFO : Last In First Out)
5. Queue
먼저 넣은 데이터를 먼저 꺼내는 자료구조(FIFO : First In First Out)어레이 리스트
배열은 자료형이 고정이기 때문에 실문에서는 잘 쓰이지 않고 어레이 리스트가 사용됨
리스트<자료형>배열명 new ArrayList<>();
- 값 추가
배열명.add(값)
- 값 삭제
배열명.remove(index)
- 크기 확인
배열명.sized()HashMap, HashSet
이해가 가지 않는 상황이라 필요할 때 찾아써야할 듯. 이해가 가지 않으니 정리도 못하겠다....
ArrayDeque
실무에서 많이 사용되는 큐로 양 쪽 모두 입출력이 가능해 유연성이 크다.
- addFirst와 offerFirst의 차이
큐의 크기에 문제가 생겼을 때 addFirst는 false를 리턴하고 offerFirst는 Exception이 난다.제네릭스
다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능으로 collection 자체가 제네릭스를 사용한 것
Lamda
함수를 좀 더 간결하게 표현하자는 의미로 함수를 정의하는 것이 아니기 때문에 중복 사용을 해야하는 경우 코드가 지저분해진다.
스트림
하나의 데이터의 흐름, 받은 데이터 값을 변경하지 않는다.
후반부부터 내용이 이해가 가지 않아 멍하니 들은 것이 더 많이 때문에 강의를 다시 들어야 할 듯 싶다. 그 뒤에 네트워크 관련해서도 들었는데 아예 들은 기억도 나지 않아 적지 않았다. 알고리즘 역시 이 후에 듣긴 했으나 멍한 정신이었어서 그냥 다시 한 번 듣고 다음 TIL에 적는게 나을 듯
정독했습니다!! 덕분에 저도 후루룩 읽고 다시 한 번 상기시켰네요 ㅎㅎ
리스트의 크기는 list.size()로 알 수 있겠죠?