학습 방법 수정하기
🤔❓ window 11이라서 docker 설치 후에 실행이 되지 않아 ec2에서 도커를 설치하는게 나을까요?
👉🏻 ec2에서 해도 되긴 하지만 ec2에 이미지를 올릴 예정이므로
차라리 노트북으로 계속 개발을 할 것이라면 window Pro를 사는 것을 추천
🤔❓ 공부 방법에 관한 고민
졸업시험으로 인해 (아직 다 졸업시험을 보지는 않았지만) 다른 강의들이 많이 밀려있습니다.
그래서 실강을 듣기보다 강의노트에 나오는 기능들을
요약정리(이 기능이 이런 곳에서 사용한다 이 기능은 어떤 의미이다 등등)하는 것으로 하려고 하는데
괜찮은 방법일까요?
👉🏻 우선 순위_언어 위주로 진행한다.
👉🏻 1. spring
2. 시간남으면 aws (aws는 부가적인 것이다. aws쪽으로 갈 것이 아니라면 언어 위주로 해야한다.)
그리고 TIL 작성하는데 시간이 오래걸리면 LIMIT를 정한다.
강의듣는 것과 정리하는 것 둘다 진행하되 LIMIT를 걸어둔다.
🤔❓ 좋은 코드를 찾아볼 수 있는 방법은 무엇일까요??
👉🏻 스터디를 이용한다.
👉🏻 팀원들끼리 코드리뷰를 한다.
🤔❓ 책으로 공부하는게 좋을까요 인강으로 공부하는게 좋을까요? (개인적인 인강 _ 타사이트)
👉🏻깊은 지식을 얻고 싶으면 책을 읽으면 된다.
(튜터님은 인강을 보신 적이 없어서 좋은 지는 잘 모르겠다고 하셨다!)
내가 가지고 있던 공부방법에 관한 고민과 팀원분들의 고민들을 모아서 튜터님에게 피드백을 받았다.
피드백을 받고 내가 강의는 미루고 강의노트에 있는 용어 정리를 먼저 진행하려고 했는데
굳이 그렇게 처음부터 끝까지 알 필요는 없다고 하셨다.
우리의 목표는 취업이기 때문에 면접에서 자주 묻는 질문들을 보고 강의에서도 언급이 되면 그것에 대해서
정리하면 되는 것이다. 전부 다 공부할 수는 없다.
그리고 TIL에 하나를 정리하면 정리할 다른 부분들이 계속 생겨나서 오래걸린다고 했더니
Limit를 걸어두라고 하셨다. (몇 시간만 정리를 하고 남은 시간에 강의를 들으라고 하셨다.)
또 오늘 2회차 팀 면담도 진행했었는데 잠 자는 시간도 중요하다고 다른 튜터님께서 말씀해 주셔서
잠 자는 시간을 3시로 정했다.
평일에 체크인 체크아웃 하면서 엑셀에 기록하고 있는데 앞으로 3시 안으로 쓸 것 같다.
그래서 앞으로 TIL은 공부하는 시간의 반만 투자하기로 했다. (오늘 배운 강의 복습 포함)
예를 들어 실강이 끝나고 점심 후 팀원 분들과 issue를 정리하고 난 시간이 4시 이면
10시간 공부할 수 있는데(저녁시간 제외) 5시간 정도 복습과 TIL정리를 할 수 있을 것 같다.
팀원분들과 issue를 정리하면 저녁시간까지 얘기해서 매일 다를 것 같다. 😂
공부하는 시간의 나머지 반은 java와 spring 공부를 하기로 했다.
이렇게 우선순위를 정하니 뭔가 마음이 편해졌다. 😆
나는 우선순위 없이 이것 저것 정리해서 우선순위를 정하라고 하셨었는데 그게 도움이 되었다.
Q. 객체 지향이란 무엇인가?
객체 : 대상을 추상화하여 프로그래밍 상에서 만들어낸 결과물
클래스 : 객체를 생성하기 위해 속성과 기능을 정의한 일종의 틀
속성(상태) : 변수, 기능(행위) : 메소드(함수)
* 메소드는 클래스 안에 들어있는 함수를 의미
클래스로 정의한 상태와 동작이라는 틀을 갖고 실제 대상들을 계속 찍어내는 프로그래밍 방법을
객체지향 프로그래밍이라고 보면 된다. (객체를 컴퓨터로 만들어낸 것이 객체지향 프로그래밍이다.)
객체지향 vs 절차지향 (코드를 어떻게 작성하느냐에 대한 개념적인 차이)
절차 : 순서대로 진행
객체 : 순서가 정해진 객체를 먼저 처리(객체의 관계에 따라 코드를 작성)
객체 지향은 실제 세계를 모델링하여 sw를 개발(코드의 재활용성이 좋다.)
절차지향은 실제 세계보다 컴퓨터에 더 가까운 언어이기 때문에 개발이 까다롭다.
1. 캡슐화, 다형성, 클래스 상속을 지원하는가
2. 데이터 접근 제한을 걸 수 있는가?
보통은 위 기준을 만족하면 객체지향, 만족하지 않으면 절차적 성격이 강해진다.
Q. 객체지향 언어란 무엇인가
컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 방법
프로그램을 다수의 객체로 만들고 이들끼리 서로 상호작용하도록 만드는 프로그래밍 언어
(객체 : 배열처럼 여러 개의 값을 담는 자료형)
객체지향 언어의 특징 : 캡슐화, 상속, 다형성, 추상화
캡슐화 : 데이터와 알고리즘을 하나로 묶어 하나의 캡슐처럼 만들어
데이터와 코드의 형태를 외부에서 알 수 없다. (private)
(내 알바 아님 이런느낌)
상속 : 부모가 자식에게 유전자를 물려주듯, 상위 클래스의 모든 것을 하위 클래스가 이어 받는 것이다.
다형성 : 상속과 연관된 개념으로, 하나의 객체가 다른 여러 객체로 재구성되는 것이다.
부모가 쌍둥이 자식을 낳으면 부모의 유전자가 두 명의 자식으로 재구성 되는 것과 같은 이치이다.
하지만 그렇다고 해서 두 쌍둥이(재구성된 객체들)의 유전자가 부모(원 개체)의 유전자와 똑같다고 볼 수는 없다.
자바의 오버로드, 혹은 오버라이드 다형성이 이 다형성을 드러내는 대표적인 예이다.
추상화 : 실존하는 객체의 여러 특성 중, 프로그램을 만드는데 필요한(공통적인) 부분만 파악해서 추출하고 필요하지 않은 것은 제거하는 것이다. (객체에서 필요로 하는 데이터와 동작들을 정리하는 과정)
출처
<객체지향(OOP)과 절차적 프로그래밍(PP)>, https://st-lab.tistory.com/151
<자바[Java] 캡슐화[Encapsulation]란? 무엇인가?>, https://radait.tistory.com/5?category=836792
로그 분석하기
2021-11-04 : 서버의 시간
INFO : Information (안내하는 것)
WARN : Warning (오류는 아니지만 경고)
ERROR : 에러
어떤 뜻일까?
public static void main(String[] args) {
}
모델링
자바는 class 명으로 파일 명을 만든다.
하나의 파일에 하나의 클래스
🤔❓ class 상속을 안하는 이유가 뭘까 언제 상속을 사용하는 걸까 궁금해졌다.
상속을 하면 부모클래스의 소스코드를 다시 작성할 필요 없이 그대로 사용할 수 있다.
즉, 부모클래스의 코드가 100 라인이면 자식클래스에서 상속 받는 순간
100라인을 작성할 필요 없이 자식클래스에서 사용이 가능하다.
이 말인 즉슨, 소소코드의 재활용이 가능하다. 중복코드를 없앨수 있다. 라는 말이 된다.
상속을 안하면 그 변수가 무엇인지 값을 넣어줘야 하는 건가??
class Parent {
int a;
}
class Child extends Parent {
int b;
public Child(int aa, int bb) {
a = aa;
b = bb;
}
public void print() {
System.out.println("a : " + a + ", b :" + b);
}
}
class Main {
public static void main(String[] args) {
Child child = new Child(100, 200);
child.print();
}
}
상속을 해도 변수에 값을 넣어줘야 한다.
정리하면 부모클래스의 내부를 수정하려면 자식클래스에서 부모클래스의 내용을 상속받아서
자식클래스의 내용을 수정하면 되는거고
부모클래스의 내부를 수정할 내용이 없으면 상속을 하지 않고 부모클래스를 그대로 사용하면 된다.
생성자
생성자를 만들어주는 이유
→ 인스턴스 생성시 필드에 초기값으로 부여하기 위해
→ 인스턴스 생성에 필요한 초기화 명령을 실행하기 위해
public class Course {
public String title;
public String tutor;
public int days;
// 이렇게 아무런 파라미터가 없는 생성자를 기본생성자 라고 부른다.
public Course() {
}
public Course(String title, String tutor, int days) {
// this 는 "이것" 이죠? 클래스 변수를 가리킨다.
this.title = title;
this.tutor = tutor;
this.days = days;
}
}
"클래스명과 똑같은 이름을 가진 메소드를 "생성자"라고 부른다.
* 메소드는 class 안에 있는 함수
* null 이란 값이 존재하지 않는다는 의미이다. (파이썬에서 none하고 똑같다.)
* this는 this 라고 표시함으로써, 빵틀 전체의 값을 바꾸는게 아니라 빵 하나의 값만 바꾸는 것
생활에 있는 것을 가지고 모델링하기
class 제과점 {
빵굽기()
}
class 마카롱집 extends 제과점{
}
class 가게 {
주문받기()
}
class 마카롱집 extends 가게{
}
* 객체지향 시스템은 협력하는 객체들의 연결망이다.
* 자바 튜토리얼 https://docs.oracle.com/javase/tutorial/java/concepts/index.html
Getter / Setter
클래스가 접근할 수 있는 범위에 따라 Private과 Public으로 나뉜다. (외부에서 접근할 수 있는 유무)
private 정보를 가져오려고 하는데 외부에서 접근하면 안되는 경우 private으로만 할 수 있는 상황에서
정보를 가져오는 메소드를 Getter, 정보를 바꾸는 메소드를 Setter를 이용
결합도 Coupling
의존성이 있다고 표현 (별로 좋은 설계가 아니다)
고객 -- 메세지 -- 바리스타
바리스타가 1시간동안 커피를 만들었더니 고객이 잠을 잔다(❌ 영향이 가면 안됨)
👉🏻 결합도를 낮추고 응집도를 높인다.
- 모듈 독립성 '지표'
* 제어의 역전(ioc)
객체가 각각의 역할과 책임이 있고 메시지로 상호작용해서 협력해나가는 것.
다형성(poly-mophism)
- di, ioc
Interface
UI : Program -- -- User
API : Program -- -- Program
HTTP API : 데이터 내놔 -- HTTP -- 드리겠습니다.
(가운데 의미가 뭐를 통해서? → HTTP를 통해서 그래서 가운데에 HTTP 적은 것)
* 가운데에 있는 것은 인터페이스를 의미한다.
Java API Doc
Code -- Interface -- Code (Sys
인터페이스 특징
- 인터페이스만 지키면 내부 구조 동작원리 몰라도 됨(자바 특징이랑 연결되어있는 것을 알 수 있다.)
ex) 운전자가 a 자동차랑 b 자동차 운전할 때 각각 다르게 운전할까? x
객체가 각각의 역할과 책임이 있고 메시지로 상호작용해서 협력해나가는 것을 잘하려면
인터페이스 설계를 할 때
설계 객체의 인터페이스는 객체가 수신할 수 있는 메시지 목록으로 구성된다
객체가 어떤 메시지를 수신할 수 있는지가 객체가 제공하는 인터페이스의 모양을 빚는다.
더 알고싶은 정보는 객체지향체조를 보면 된다.
keypromoter X
단축키 정보
classdiagram 다이어그램
사용할 프레임워크나 라이브러리가 dependency(의존성)
show gradle dependency
ctrl + shift + alt + u
다른 사람들이 만들어둔 도구 내려받기
- Javascript - NPM
- Python - pip
- Java - mavenCentral, jcenter
https://mvnrepository.com/repos/central
add gradle dependency하는 법
build tool에 접근한다.
jpa
jdbc !! 중요 키워드 !!
✔️ JDBC
JDBC API를 사용하면 관계형 데이터베이스에서 스프레드시트 및 플랫 파일에 이르기까지
거의 모든 데이터 소스에 액세스할 수 있다.
jdbc:h2:mem:testdb
🤔❓ rdms란?
🤔❓ 왜 nosql을 사용했을까?
🤔❓ 패키지를 왜 만들까?
패키지를 사용하는 이유는 클래스명의 고유성을 보장하기 위함이다.
때로는 서로 다른 용도의 라이브러리를 도입할 때 이름이 충돌하는 클래스들이 있을 수 있는데
이럴 때 패키지 기능을 사용하여 클래스의 이름이 충돌하는 것을 방지할 수 있다.
자바 패키지란 클래스들의 모음집
(함수를 묶은 것이 클래스이고 클래스 묶은 것이 패키지이다.)
🤔❓❓ 패키지를 통해서 라이브러리끼리 구분이 가능하다는데 패키지와 라이브러리의 차이는 뭘까??
단순하게 비유하자면, 패키지가 영업부, 홍보부, 이런 단위라면 라이브러리는 회사이다.
✏️ 라이브러리
여러 모듈과 패키지를 묶어 라이브러리라고 한다.
✏️ 패키지
특정 기능과 관련된 여러 모듈들을 하나의 상위 폴더에 넣어 놓은 것을 패키지라 한다.
패키지 안에 여러가지 폴더가 더 존재할 수 있다.
✏️ 모듈
특정 기능들(함수, 변수, 클래스 등)이 구현되어있는 파일을 의미한다.
* 패키지에 의해 나뉘어진 클래스의 이름의 모임을 일컬어 '네임스페이스' 라고 한다.
출처
<[JAVA] 자바 패키지(Package)란?>, https://mozi.tistory.com/548
okky, <패키지와 라이브러리>, https://okky.kr/article/381786
< [Python] 라이브러리, 패키지, 모듈의 차이 > , https://wooono.tistory.com/36
ORACLE, <JDBC>, https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/