일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- bit manipulation
- Stack
- Class
- dynamic programming
- SQL
- 코테
- Binary Search
- database
- greedy
- sorting
- implement
- Method
- Number Theory
- hash table
- Math
- array
- 자바
- 파이썬
- Counting
- geometry
- two pointers
- Data Structure
- Binary Tree
- 구현
- 코딩테스트
- Matrix
- Tree
- simulation
- string
- java
- Today
- Total
목록자바 (584)
코린이의 소소한 공부노트

인터페이스는 1. 추상 메서드의 집합으로, 2. 부수적으로 상수, 디폴트 메서드, 스태틱 메서드를 선언할 수 있다.(jdk 1.8부터 적용) interface A { void method1(); void method2(); } class B implements A{ public void method1() { } public void method2() { } } abstract class C implements A{ public void method2() { } } - 어떤 클래스(B)가 인터페이스(A)를 구현할 경우, A에 선언된 모든 추상 메서드를 구현해야 한다. 만약 모든 메서드를 구현하지 않는다고 하면 추상 클래스(C)로 만들어야 한다. - 이 상태에서 인터페이스(A)에 새로운 추상 메서드를 추가하..

1. 두 대상(객체) 간의 연결을 돕는 중간 역할을 한다. - 사람은 인간의 언어를 사용하고, 컴퓨터는 기계어를 사용한다. 서로의 말을 이해하지 못하지만, 우리는 컴퓨터를 쉽게 사용한다. 여기서 인터페이스(껍데기)는 GUI(Graphic User Interface)이다. GUI가 화면에 띄운 아이콘을 누르거나 키보드로 입력을 함으로써 컴퓨터 언어, 내부(알맹이)를 몰라도 사람이 컴퓨터를 사용할 수 있게끔 해 준다. 2. 변경에 유리한 설계를 하게 해 준다. - 그래픽 카드를 바꾸거나 RAM카드를 바꾸는 등 컴퓨터 내부(알맹이)의 변화가 생겨도 GUI(껍데기)를 이용해 얼마든 사용할 수 있기 때문에 사용자는 컴퓨터 내부 변화에 크게 영향받지 않는다. 3. 선언(설계)과 구현을 분리시킬 수 있게 한다. 1)..

시간을 나타내는 Time 클래스가 아래 코드와 같고, Time 객체를 2개 만들었다고 해보자. class Time{ private int hour; // 0시 ~ 23시 private int minute; // 0초 ~ 59분 private int second; // 0초 ~ 59초 public int getHour() { return hour; } // 이하 생략 } 이때 한 객체에서 다른 객체의 hour값을 가지고 올 때, 메서드를 통해서 iv에 접근해야 한다. t.hour; // No t.getHour(); // OK 캡슐화를 하는 이유는 데이터를 보호하기 위함이다. 그래서 위 코드의 첫 줄같이 직접 iv에 접근하는 것이 아닌 메서드를 통해 접근해야 한다. 이때 객체의 가장 바깥 껍데기(메서드를 감..

추상 클래스를 만드는 방법은 1. 여러 클래스에 공통적으로 사용될 수 있는 메서드, 변수를 이용해 추상 클래스를 바로 작성하거나 2. 기존 클래스의 공통부분을 뽑아 추상 클래스를 만든다. 예시를 보는 게 가장 빨리 이해가 될 것이다. class Infantry { // 보병 int x, y; void move(int x, int y) { } void stop() { } void stimPack() { } } class Tank{ // 탱크 int x, y; void move(int x, int y) { } void stop() { } void changeMode() { } } class Dropship{ // 수송선 int x, y; void move(int x, int y) { } void stop()..

앞서 클래스를 객체를 만드는 설계도로 표현했었다. 이번에 공부할 추상 클래스는 미완성 설계도로 표현할 수 있다. [추상 클래스] 1. 미완성 메서드를 갖고 있는 클래스다. abstract class Person{// 제어자를 붙여 추상 클래스임을 알려준다. abstract void eat(String s);// 추상 메서드 abstract void introduce();// 추상 메서드 } Person 안에 선언된 메서드들은 제어자 abstract가 있고 구현부가 없다. 이렇게 구현부가 없는 메서드를 추상 메서드라고 한다. 그리고 이런 추상 메서드를 갖고 있는 클래스를 추상 클래스라고 한다. 2. 다른 클래스 작성에 도움을 주기 위한 클래스로, 인스턴스를 생성할 수 없다. Person p = new Pe..

지금까지 다형성에 대해 공부한 것은 다음과 같다. 1. 조상 타입의 참조변수에 자손 타입의 객체를 선언할 수 있다. class Parent { } class Child extends Parent { } Parent p = new Child(); 2. 참조변수의 형변환: 사용 가능한 멤버 개수 조절 class Parent { } // 멤버 3개 class Child extends Parent { } // 멤버 2개 + 상속 3개 = 총 5개 Parent p = new Child(); // p로 접근 가능한 멤버는 5개 중 3개 Child c = (Child)p; // c로 접근 가능한 멤버는 5개 중 5개 3. instanceof 연산자: 형변환 가능 여부 확인 class Parent { } class C..

참조변수의 형변환은 조상-자손 관계일 때 가능하다. 참조변수의 형변환을 하는 이유는 사용 가능한 멤버의 개수를 조절하기 위해서다. 형변환을 이용한 어떤 기능을 만든다고 할 때, 프로그램 내의 모든 클래스들의 관계를 내가 다 알고 있지 않은 이상 형변환이 가능한지 꼭 확인해 볼 필요가 있다. 그럴 때 이용하는 연산자가 instanceof이다. 연산자 치고 이름이 길다. instanceof 연산자는 - 참조변수의 형변환 가능 여부를 확인할 때 사용한다. - 피연산자가 2개인 이항 연산자다. -> 객체 instanceof 클래스 - 형변환이 가능하다면 true를, 불가능하다면 false를 반환한다. - 형변환 전에 꼭 사용해보는 것이 좋다. 객체와 클래스의 관계에 따라 어떤 반환 결과를 주는지 확인해보자. P..

참조변수의 형변환은 - 사용할 수 있는 멤버의 개수를 조절하는 것으로, - 조상-자손 관계의 참조변수는 서로 형변환이 가능하다. class Parent { // 멤버 3개 } class Child1 extends Parent { // 멤버 2개 } class Child2 extends Parent { // 멤버 1개 } // 메인 내부에서.. Child1 c1 = new Child1(); Parent 클래스를 상속받은 2개의 클래스 Child1, Child2가 있다. 메인에서 Child1 타입의 객체 c1을 생성 후, 어떨 때 참조변수의 형변환이 가능한지 확인해보자. * 먼저 기억해내야 할 것: 범위가 작은 것 -> 큰 것은 캐스팅이 필요 없지만, 반대 상황에서는 필요하다 int i = 1; double..

다형성은 - 여러 가지 형태를 가질 수 있는 능력으로, - 자바에서는 조상 타입 참조변수로 자손 타입 객체를 다루는 것을 말한다. class Parent { int pi1; // 멤버 변수 2개 int pi2; void pm1() { } // 메서드 3개 void pm2() { } void pm3() { } } class Child extends Parent { int ci; // 멤버 변수 1개 void cm() { } // 메서드 1개 } // 메인 내부에서.. Parent p = new Parent(); // OK Child c = new Child(); // OK Parent pp = new Child(); // OK. WHY???? Parent 클래스가 있고, 이를 상속받은 Child 클래스가 ..

접근 제어자는 해당 클래스/변수/메서드의 접근 범위를 정해준다. 이는 아래 글에 자세히 설명되어있다. 2022.04.16 - [Java] - 제어자 왜 접근 범위를 설정해줘야 하는 것일까? 그 이유는 1. 외부로부터 데이터를 보호하기 위해서 2. 내부적으로는 사용되지만 외부에는 불필요한 부분을 감추기 위해서다. 여기서 밑줄 친 부분을 캡슐화라고 한다. 예를 들어보자. 시간, 분, 초가 멤버 변수로 있는 Time 클래스를 만든 후, 시간 설정을 해보려 한다. class Time{ public int hour; // 0시 ~ 23시 public int minute; // 0초 ~ 59분 public int second; // 0초 ~ 59초 } public class Test{ public static vo..