일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hash table
- 코테
- sorting
- Number Theory
- Class
- greedy
- Counting
- Method
- Data Structure
- string
- 구현
- simulation
- SQL
- 파이썬
- geometry
- two pointers
- Matrix
- array
- bit manipulation
- database
- 자바
- java
- dynamic programming
- Binary Tree
- Tree
- Binary Search
- Stack
- Math
- implement
- 코딩테스트
- Today
- Total
목록Java (109)
코린이의 소소한 공부노트

지금까지 다형성에 대해 공부한 것은 다음과 같다. 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..

영어에는 여러 품사가 있는데, 그중 형용사는 명사 앞 또는 뒤에 붙어서 명사를 수식해주는 역할을 한다. 갑자기 영어 시간이 된...것은 아니고, 이번에 공부할 제어자가 형용사 역할을 하기 때문에 잠깐 언급해본 것뿐이다.. 제어자는 1. 클래스와 클래스의 멤버(변수, 메서드)에 부가적인 의미를 부여해준다. - 예시) public: '공공의, 공적인'이라는 뜻으로, 이것을 붙인 클래스나 변수, 메서드는 누구나 사용할 수 있는 상태가 됨 - 나머지는 아래에서 자세히 설명 예정 2. 접근 제어자와 그 외 제어자로 나눌 수 있다. - 접근 제어자: public, protected, default(아무것도 붙이지 않으면 됨), private - 그 외 제어자: static, final, abstract, nativ..

import문은 이미 여러 번 만나봐서 무엇을 말하는지는 짐작할 것이다. import java.util.Date; 클래스 위에 import문을 선언해두면, 해당 클래스 또는 해당 패키지 안에 있는 클래스를 불러다 쓸 수 있는 것으로 알고 있을 것이다. 나 또한 그랬다. 그러나 import문은 사용자를 위한 것이 아닌, 컴파일러를 위한 것이었다! 띠로리.. import문은 1. 컴파일러에게 클래스가 속한 패키지가 무엇인지 알려준다. - 클래스 이름이 중복되는 것이 많기 때문에, 어느 패키지에 속해있는지 아는 게 중요하다. - 해당 클래스를 불러와서 쓰려고 할 때, 어디로 갈지 그 길을 알려준다. 2. 사용자가 패키지 이름을 생략할 수 있게 만들어준다. - 원래 클래스를 사용할 때 패키지 이름을 꼭 써줘야 ..

자바에서 말하는 패키지란 1. 서로 관련된 클래스의 묶음을 나타낸다. 2. 이클립스 화면에서 Package Explorer를 보면 클래스는 클래스 파일(이름.class), 패키지는 클래스 파일을 담고 있는 폴더, 하위 패키지는 하위 폴더로 되어 있다. 이 말인즉슨 패키지 안에 패키지를 넣을 수 있다는 뜻이다. 3. 클래스의 실제 이름(full name)은 패키지를 포함한다. 우리가 알고 있는 문자열 String클래스의 풀 네임은 java.lang.String이다. java 패키지 안에 있는 lang 패키지에 String 클래스가 있다는 뜻이다. 패키지가 무엇인지는 알았으니, 한번 만들어보자. 필자가 공부할 때나 포스팅하기 전 코드를 돌려볼 때 practice라는 자바 프로젝트를 이용한다. 여기에 test..

이 글을 읽기 전 다음 링크를 읽었으면 좋겠다! 2022.03.12 - [Java] - 생성자 this() vs 참조변수 this -> 바쁜 사람들을 위한 요약본 1) 생성자 this()는 같은 클래스 내의 다른 생성자를 호출하기 위한 것 2) 참조변수 this는 인스턴스 자신을 가리키는 참조변수. 생성자, im 내부에서 lv와 iv 구별 위해 사용. sm에서 사용 불가 생성자 super()와 참조변수 super도 이름만 같을 뿐, 하는 일은 완전히 다르다. [참조변수 super] 1. 객체의 조상 클래스를 가리키는 참조변수이다. - 객체 자신을 가리키는 this와 차이가 있다. - 더 구체적으로 설명하자면, 조상 클래스로부터 상속받아 자신의 멤버가 된 것을 가리킨다. -> 넓은 의미로 객체 자신을 가리..

메서드 오버라이딩이란 상속받은 조상의 메서드를 자신에 맞게 변경하는 것을 말한다. 예시로, 2차원 좌표를 나타내는 Point 클래스를 상속받아 3차원 좌표를 나타내는 Point3D 클래스를 만들었다. class Point{ // 2차원 좌표 int x; int y; String getLocation() { // 객체의 x, y값 순서쌍으로 출력 return "(x, y) = (" + x + ", " + y + ")"; } } class Point3D extends Point{ // 3차원 좌표 int z; String getLocation() { // 메서드 오버라이딩 return "(x, y, z) = (" + x + ", " + y + ", " + z + ")"; } } Point 클래스는 좌표가 2..