4주차 두째날
인터페이스 분리 원칙을 실습해보는 문제를 내주셨다.
발표 연습을 위해 클래스, 인터페이스등을 설명을 한 명씩 앞에 나와서 했다.
첫 날 특강때도 배우긴했는데 깃에대해서도 배웠다. 늘 새롭다.
배운점
인터페이스 분리 원칙
객체지향 5대원칙중의 하나로 ISP(Interface Segeregation Principle)
객체는 자신이 사용하는 메서드에만 의존해야한다. = 객체가 사용하지 않는 메소드를 의존해서는 안된다.
인터페이스는 지나치게 광범위하거나 지나치게 많은 기능을 구현해서는 안되고, 그 인터페이스를 사용하는 객체를 기준으로 잘게 분리되어야 한다.
예시 파일을 인터페이스 분리 원칙에 따라 분리하라고 하셨다.
Bank인터페이스를 implements하여 사용하는 클래스 두 개가 있다. Bank인터페이스의 메소드들의 성격이 다 다르고 두 클래스가 모든 메소드를 사용하는 것이 아니기 때문에 각각 interface로 나누어 주었다.
예시. (다 가져오진 않았다.)
Bank class
public interface Bank {
void doPersonalFinance();
void doEnterpriseFinance();
void doPrivateBanking();
default String msg(String bankName, Duty duty) {
return String.format("%s는 %s를 합니다.", bankName, duty.description());
}
}
PersonalFinance interface
public interface PersonalFinance extends BankMessage{
void doPersonalFinance();
}
EnterpriseFinance interface
public interface EnterpriseFinance extends BankMessage{
void doEnterpriseFinance();
}
PrivateBankingName interface
public interface PrivateBankingName extends BankMessage{
void doPrivateBanking();
}
BankMessage interface
public interface BankMessage {
default String messageSend(String bankName, Duty duty) {
return String.format("%s 는 %s 를 합니다.",bankName,duty.description());
}
}
메소드마다 인터페이스를 나누어 주었다. 그 후 각각 필요한 기능만 사용할 수 있도록 필요한 인터페이스만 implements 해주었다.
HappyBank class
public class HappyBank implements PersonalFinance,EnterpriseFinance {
,
,
,
UnhappyBank class
public class UnhappyBank implements PrivateBankingName {
@Override
public void doPrivateBanking() {
System.out.println(this.messageSend(this.getClass().getSimpleName(), PB));
}
}
발표 연습
클래스, 인터페이스 등 배운내용을 바탕으로 설명해 보라고 하셨다.
꼭 듣고싶은 단어들이 있다. 핵심 키워드 나와야한다. !
추상클래스, 다형성에 대해 설명할 수있는지, 왜 이래야하는지, 필요성!을 말해라
좋은 부트캠프는 프레젠테이션을 잘 시킨다.
자기가 아는내용 동글동글하게 뭉쳐서 사탕꺼내듯이 까서 보여줘야한다.
문법적인건 안궁금하다
확실하지 않으면 절대 말하지마라! 모르면 대답하지마.
"준비가덜 되어서 더 알아보겠습니다"라고 할 것
질문 5개, 내용은 대충적은거. .
- 클래스란
필드 속성... - 객체란
실체화를할 여러가지 대상... - 인스턴스란
실체화된 객체
new연산자 통해 메모리 할당한 것.. - 추상클래스와 인터페이스 개념 및 공통점과 차이점 비교
공통적인 코드 중복 줄이고 재사용 높임
서브클래스에서 구체화 해주어야한다.
추상클래스는 : 변수선언 제한, new가능, extends, 추상메소드, 일반메소드 다 가능
인터페이스 : 상수만, new불가, implements
- 인터페이스를 이용한 다형성을 예시를 들어 설명하세요
부모의 메소드 오버라이딩해서 기능에 맞게 사용할 수잇으므로
바퀴라는 인터페이스를 버스, 차 받아서 사용할 수 있습니다.
깃
분산형 버전 관리 시스템 (Version Control System) 이며 깃허브 (GitHub)는 깃 프로젝트 호스팅 서비스
깃허브와는 다름!: 호스팅 서비스
VCS (Version Control System) : 프로그램 버전 관리를 위한 툴이며 버전 (Version)은 프로그램의 일부 내용이 바뀌거나 새로운 기능이 추가되는 등의 변화가 결과물로 나오는 것. 깃은 이 버전을 관리하며, 버전을 관리한다는 의미는 프로젝트의 시간과 차원을 관리하는 것.
git bash 관리자 권한실행
버전 확인
git --version
협업시 윈도우와 맥의 Enter/Return 방식 차이에 따른 줄바꿈 오류방지를 위해 입력
git config --global core.autocrlf true
소스트리 설치
https://www.sourcetreeapp.com/
VScode
ctrl + 백틱 -> 터미널창
ctrl + shift + p -> select default profile 검색
defalut로 git bash만 나오게할 수 있다.
market place에 korean language pack .. 검색
한국어 설정할 수 있다.
market place에 Material Icon Theme 검색
파일 , 폴더 가독성이 좋아짐
초기설정:
이름과 이메일 설정
git config --global user.name "Hwije"
git config --global user.email "gnlwp96@gmail.com"
master를 main으로 바꾸기
git config --global init.defaultBranch main
git init
깃 폴더 맛들어짐, 지금부터 관리할 대상이야.
.yaml 파일
json형식 텍스트 파일이라고 봐도됨
git status
상태확인
빨갛게 나온 것: 아직 깃의 관리대상이 아니다. add 되지 않음
소스트리에 git_test폴더를 끌어다 놓는다.
스테이지: 무대
.gitignore: 깃에 안올릴것 / 보안필요한 것 / 배재하고싶은 파일명 / 깃관리대상 아님
status로 보면 제외되어서 안보인다.
*.파일 하면 다 배제됨
*.yaml
최상위폴더안에 하위폴더는 그대로두고 상위에있는 파일 무시
! 쓰면 제외대상 제외됨
untracked file : 깃이 한번도 관리하지않는 파일
commit:
타임캡슐에 묻는다. git add 하면 타임캡슐에 담기만함 ,
패킹하면 commit
add
git add tigers.yaml
git add . // 폴더안에있는 모든 파일을 커밋준비단계로 옮기겠다.
준비되어있다.
git commit
insert 또는 i 누르면 edit모드 가진다.
맨 윗줄에 first commit 입력(메시지)
esc + shift + ; -> wq 하면 빠져나옴 (write quite)
커밋됨
다 밀봉하고 묻음.
소스트리보면 커밋돼있다.
git log
하면 커밋한 시간분초 나옴
git log
git diff
바뀐부분 확인할 수 있다. (commit하고 변경한애만) 새로만든 파일은 나타나지 않음. 깃이 관리하는 파일이 아니니깐
git diff
git status하면 새로생긴거, 바뀐거 내용 확인할 수있다.
commit
git commit -m "Replace tigers with leopards"
git log 하면 첫커밋 두번째 커밋 등 정보들을 볼 수있다.
git add 와 commit 동시에 하기: -am을 사용한다.
git commit -am "add gorge to Tigers"
커밋메세지: 타임캡슐 메시지 , 동료들이 알아보기 쉽게해야하므로 함부로 적지마라.
소스트리에서도 추가, 삭제 볼수있다.
캡슐화 시켜서 땅에 묻었다. 예전 차원으로 되돌리고싶다.
깃 과거로의 여행 - 리셋(reset), 리버트(revert)
리셋: 이전 상태로 되돌리거나 특정 커밋을 삭제할 때
리버트: 이전상태로 되돌아 가면서 새로운 커밋 생성하여 삭제된 내용을 되돌린다. 되돌린내용을 하나하나 기록하고 싶을때.
reset
커밋 해쉬코드값 적음
되돌아가서 그 이후는 다 삭제됨
git reset --hard 939a16b8cda406fe3e0a3e191e613bbdc41dd6b11~
인텔리제이 git init 작업
상단에 VCS -> enable version control integration... 깃 작업할 수있다.
commit 내용 입력하고, Commit 클릭 하면 됨
상단에 변경된 파일 체크
origin : 깃허브
깃허브 레퍼지토리 url 넣음
push하면 되어있음.
회고
발표를 시키셨다. 머릿속으로는 알고 있는데 막상 앞에 나와서 말을 하려니 머릿속이 정신이없다. 강사님이 발표는 중요하다고 하셨다. 면접때도 압박 질문이 들어오고, 칠판에 쓰면서 설명도 해야된다고 하셨다. 처음 발표 할때보다 두번째가 낫고 두번째보다 세번째가 나을 것이다. 연습해야한다. 그치만 좀 두렵다. 어쩌겠어. 해야지
깃은 첫 날 특강때도 배웠지만 늘 새롭다. 명령어들이 간단하고 외워서 치기만 하면 될 것같지만 오류가 많이 일어난다. 깃을 잘 다루면 작업도 훨씬 쉬워지고 협업도 편할 것같다. os 강의 다 들으면 깃강의도 들을 생각이다. 열심히하자.
오늘 포스팅 적은내용 집와서 노트북 열어보니 날아가있다. 열이좀 받지만 복습이라고 생각하자.
'신세게 - Java 공부' 카테고리의 다른 글
5주차 배운점 느낀점 - Collection, List, ArrayList, Set, Map (3) | 2024.10.03 |
---|---|
4주차 배운점 느낀점- 예외처리, 예외, try, catch, finally, throws, throw, 사용자정의예외 (10) | 2024.10.03 |
4주차 배운점 느낀점 - 인터페이스, 다형성, 타입변환 (7) | 2024.10.03 |
3주차 배운점 느낀점 - 클래스 다이어그램, 클래스간의 관계 (9) | 2024.10.03 |
3주차 배운점 느낀점 - Usecase, 다이어그램, 엑터, 관계, 추상화, 인터페이스 (16) | 2024.10.03 |