Language/Java

    🏺 객체를 사용한다는 건? (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 ..

    ❌ 자바 캡슐화 : 아무나 접근 못하게 할테다

    🟣 캡슐화(encapsulation) 인스턴스의 변수에 추상화 목적에 맞는 유효한 값만 넣을 수 있도록 외부 접근을 제한하는 문법이다. 종류 범위 private 클래스 내부에서만 접근 가능 default 클래스 내부 + 같은 패키지 접근 가능 protected 클래스 내부 + 같은 패키지 + 서브 클래스 접근 가능 public 모두 접근 가능 🟣 캡슐화와 접근제한자 : 아무나 못 들어온다! ✔️ 한 클래스에서 다른 클래스에 접근 가능한지를 판별하기 위해서는 위의 접근제한자의 종류를 알 필요가 있다. ✔️ 서브 클래스에서 슈퍼 클래스로 접근할 때 슈퍼 클래스에서 지정한 접근 범위보다 같거나 넓어야한다. ✔️ 공통영역 private는 항상 같은 클래스 내에서만 접근 가능하기 때문에 다른 클래스에서 접근할 수..

    🎁 this, super 그리고 오버라이딩(Overriding) 개념잡자

    this vs super 🟣 필드에서의 this와 super 필드에서의 this과 super는 말 그대로 해당 레퍼런스가 가리키는 인스턴스의 클래스를 지칭한다. A4 obj = new A4(); obj.name // A 클래스의 name obj.tel // A3 클래스의 tel obj.age // A4 클래스의 age obj.print(); A4.print(): => this.name(A), super.name(A) => this.age(40), super.age(30) => this.tel(A3: 010-1111-2222), super.tel(A3: 010-1111-2222) => this.working(false), super.working(true) ---------------------------..