github remote repository생성
인텔리제이로 프로젝트 생성
vcs로 깃하고 연결
레포지토리 연결
커밋하고 푸쉬
브랜치변경main으로 올리기
간단한 swap로직을 작성했다.
정수 변수 a와 b에 각각 값을 할당하고 임시변수 temp에 a값을 옮겨두고, b값을 a로, temp값을 b로 옮기는 로직이었다.
빌드한 프로젝트를 git repository에 push했다.
default브랜치가 master로 되어있어서, New Branch로 main브랜치로 변경했다.
맥북과 윈도우에서 commit은 cmd K, ctrl K다.
맥북과 윈도우에서 switcher(탭전환)은 ctrl tab이다.
맥북과 윈도우에서 commit은 cmd 0, ctrl 0이다.
맥북과 윈도우에서 파일히스토리는 cmd e, ctrl e다.
맥북과 윈도우에서 try catch단축키는 cmd option t, ctrl alt t다.
인텔리제이에서 preference-plugin-ignore플러그인을 깔았다.
파일을 바로 git에 올라가지 않게 제외할 수 있어서 유용하다.
Calculate클래스를 만들고, 정수타입 매개변수a,b를 받아 사칙연산을 수행하는 메소드를 만들고, CalculatorMain클래스에서 실행되도록 코딩했다.
그리고 커밋, 푸쉬했다.
생성자를 추가하고, 매개변수를 없애서 변수를 한번만 할당해서 사칙연산을 하도록 코드를 고치고 커밋, 푸쉬했다.
RandomCalculator클래스를 만들고, 정수타입 매개변수 a를 받아서, 난수를 생성한 후, 사칙연산을 수행하는 메소드를 만들었다.
다만 나눗셈의 경우 난수가 0일 경우, "랜덤하게 생성된 숫자가 0입니다."라는 결과가 출력되게 했다.
같은 문젠데 인터페이스로 수행하는 멤버를 나누도록 코드를 고쳤다.
interface이용해 DI하라는 문제였다.
인터페이스를 선언하고,
인터페이스를 구현한 클래스(변종)를 만들고,
인터페이스를 멤버변수로 class에 선언하고,
클래스를 인터페이스구현체를 인스턴스 생성후 생성자 이용해서 의존성주입시켰다.
자바의 원칙 SOLID가 있다.
1.Single reponsibility principle이란 단일책임원칙으로써 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함.
클래스나 모듈은 변경하려는 단 하나의 이유만을 가져야 한다.
다른 시기에 다른 이유로 변경되어야 하는 두 가지를 묶는 것은 나쁜 설계다.
한 클래스를 하나의 책임에 집중하도록 유지하는 것이 중요한 이유는 그것이 클래스를 더욱 튼튼하게 만들기 때문이다.
2.Open-closed principle이란 개방폐쇄원칙으로 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.
애플리케이션의 요구사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.
소스코드나 바이너리코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다. 모듈의 실행가능한 바이너리 형태나 링크가능한 라이브러리를 건드릴 필요가 없다.
객체지향프로그래밍언어에서는 고정되기는 해도 제한되지 않은, 가능한 동작의 묶음을 표현하는 추상화가 가능하다.
모듈은 추상화를 조작할 수 있다.
이런 모듈은 고정된 추상화에 의존하기 때문에 수정에 대해 닫혀있을 수 있고, 반대로 추상화의 새 파생클래스를 만드는 것을 통해 확장도 가능하다.
따라서 추상화는 개방-폐쇄 원칙의 핵심요소이다.
3.Liskov substitution principle이란 리스코프치환법칙으로 객체는 프로그램의 정확성을 깨뜨리지 않으면서 상위자료형의 객체를 하위자료형의 객체로 치환할 수 있어야 한다는 원칙이다.
4.Interface segregation principle이란 인터페이스 분리 원칙으로써 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
이와 같이 작은 단위들을 역할 인터페이스라 한다.
인터페이스 분리 원칙을 통해 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.
5.Dependency inversion principle이란 의존역전원칙으로 소프트웨어 모듈들을 분리하는 특정 형식을 지칭한다.
이 원칙에 따라 상위계층이 하위계층에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위계층이 하위계층의 구현으로부터 독립되게 할 수 있다.
이 원칙은 상위 모듈은 하위 모듈에 의존해서는 안되며, 상위 모듈과 하위 모듈 모두 추상화에 의존해야 하며, 추상화는 세부사항에 의존해서는 안되고, 세부사항이 추상화에 의존해야 한다는 내용을 담고 있다.