java
🎈 Learn about use-case model
유스케이스 모델 개발할 시스템의 기능이 무엇인지 식별하는 작업. 📌 액터(actor) 시스템을 사용하는 사람, 프로세스, 장치를 가리킨다. 액터의 2가지 종류 : primary actor, secondary actor actor의 상속 자바 클래스 상속과 비슷하게 생각하면 된다. 액터 역할에 따라서 분류한다. 📌 유스케이스(Use Case) 액터가 시스템을 통해 수행하는 업무이다. 📌 유스케이스 식별 가이드 & 병합 & 분리
🏺 객체를 사용한다는 건? (How to use)
📌 객체를 사용한다는 의미 객체지향 프로그래밍에서는 클래스와의 관계를 잘 파악하는 것이 무엇보다도 중요하다. ✔️ 객체를 만든다는 것을 꼭 인스턴스를 만드는 것이라는 생각을 하지말자. 이는 우리 일상생활에서 일어나는 상황과 같다. 손좀 봐야겠다 1. 손이 어떻게 생겼는지 봐야겠다. 2. 혼나다라는 뜻으로 그 놈 손 좀 봐야겠다는 의미 ✔️ 객체도 상황에 따라서 나뉘어진다. 인스턴스를 만든다. 클래스를 사용한다. 등등.. ✔️ 객체를 사용한다는 의미는 클래스를 사용함으로써 클래스와의 관계를 통해 메서드를 호출하겠다는 의미이며 즉 메서드 호출에 관한 내용이라고 생각하면 된다. 📌 Caller & Callee 프로그램을 짜다가 인터페이스를 만나게 되면, ✔️ 누가 호출자(caller)이고 누가 피호출자(cal..
🖍️ 자바 : About Interface Ⅰ
📌 인터페이스와 상속 중복 메서드가 오버로딩 규칙을 위반할 경우 다중 구현 불가 파라미터 타입,개수,순서가 다른 경우 같은 이름의 메서드를 중복 정의 할 수 있다. 파라미터명은 상관없다. 리턴타입도 상관없다. 📌 인터페이스와 추상클래스의 콜라보 Ⅰ interface ProtocolA { void rule1(); void rule2(); void rule3(); void rule4(); } // 추상클래스에서 인터페이스의 규칙을 모두 미리 구현해 둔다. // 물론 최소 상태로 구현한다. abstract class AbstractProtocolA implements ProtocolA { @Override public void rule1() {} @Override public void rule2() {} @O..
📙 Template Method Pattern
📌 Template method pattern 템플릿 메소드 패턴(template method pattern)은 소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 다시 정의할 수 있게 해준다. (출처 : 위키백과) 추상클래스인데 대부분의 기능은 구현되있어 나머지 중요한 부분 템플릿으로 남겨둔다. 템플릿 메서드 패턴 = 상위클래스는 추상 클래스(기본흐름정의) 구현은 서브 클래스에게 맡긴다. 큰 흐름은 슈퍼클래스가 작은 흐름은 서브 클래스 추상 클래스 , 추상 메서드? >> 템플릿 메서드 생각하면 된다. 📌 추상클래스(abstract class)와 구현 클래스(concrete class) 추상클래스를 만든 개발자..
🖨️ Shallow Copy & Deep Copy
🖨️ Shallow copy & Deep copy learn about shallow copy ✔️ Object의 clone()은 해당 객체의 필드 값만 복제한다. ✔️ 그 인스턴스 변수가 가리키고 있는 객체는 복제하지 않는다. ✔️ 이런 방식의 복제를 "shallow copy(얕은 복제)"라 부른다. public class Exam0173 { static class Engine { int cc; int valve; public Engine(int cc, int valve) { this.cc = cc; this.valve = valve; } @Override public String toString() { return "Engine [cc=" + cc + ", valve=" + valve + "]"; }..
🌱 from 추상클래스 to 인터페이스
from 추상클래스 to 인터페이스 1. 추상클래스 사용 전 두 개의 정렬 객체가 서로 다른 타입이기 때문에 정렬을 수행하고 출력할 메서드를 따로 따로 만들어야 한다. 클래스의 사용법도 달라서 불편하다. ✔️ BubbleSort 객체는 run()을 호출해야 하고, ✔️ QuickSort 객체는 start()를 호출해야 한다. display(s1, values); display(s2, values2); 2. 추상클래스 사용 전 : 상속 사용하기 // 정렬을 수행하는 클래스를 한 타입으로 묶기 위해 // 다음 클래스를 정의하였다. public class Sorter { public void sort(int[] values) {}; } ✔️ 정렬 객체를 사용하는 방법을 통일하면 사용하기가 쉬워진다. ✔️ 두 ..
🔗 노드와 노드를 이어주는 연결리스트(LinkedList)
🔗 연결리스트(Linked List) 연결리스트 = 주소 다루는 것을 연습하기 좋다. 📌 배열과 연결리스트의 차이 ✔️ 배열의 장점 인덱스로 요소들을 찾기 때문에 속도가 빠르다. ✔️ 배열의 단점 가비지가 늘어난다!(예시참고) 다음 예시는 배열의 길이가 꽉 찼을 때 기존 배열보다 50% 증가된 새로운 배열을 만들어 주소를 옮기는 방식을 코드로 나타내었다. [예시1] if (this.size == this.boards.length) { // 꽉 차면 새로 만든다. // 기존 배열보다 50% 더 큰 배열을 만든다. Board[] arr = new Board[this.boards.length + (this.boards.length >> 1)]; // 기존 배열의 값을 새 배열로 복사한다. for (int i ..
📝 클래스 다이어그램 (Class Diagram)
클래스 다이어그램 ✔️ 시스템에서 사용되는 객체 타입을 정의한다. ✔️ 객체 지향 시스템 모델링에서 공통적으로 많이 쓰이는 다이어그램이다. 클래스 다이어그램의 관계 중 다음 5가지를 통해 알아보고자 한다. ✔️ 상속(inheritance) 슈퍼클래스와 서브클래스로 나누어 상속관계를 화살표로 표시한다. ✔️ 연관(association) 화살표로 연관관계를 나타낸다. ✔️ 집합(aggregation) 약한 결합을 나타내며 속이 빈 마름모로 표시한다. ✔️ 합성(composition) 강한 결합을 나타내며 속이 찬 마름모로 표시한다. ✔️ 의존(dependency) 일시적 관계를 표현할 때 사용하며 점선으로 표시한다. "위 5가지의 공통점은 전부 다 의존관계의 개념으로 볼 수 있습니다." 상속 연관 집합 합성..