this는 객체 즉, 인스턴스 자신을 표현하는 키워드이다.
제어자는 클래스, 변수, 메서드의 선언부에 사용되며 외부에서 접근하지 못하도록
제한할 수 있다.
public, protected, default, private로 구성되어 있으며
각 접근제한은 다음과 같다.
private : 해당 클래스 내에서만 접근 가능
public : 모든 클래스에서 접근 가능
default : (아무것도 적지 않았을 때) 같은 패키지 내에서만 접근 가능
protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근
접근 제어 범위 : private < default < protected < public
패키지란 클래스의 일부분이면서 클래스를 식별해 주는 용도이다.
package 상위패키지.하위패키지;
로 선언이 가능하다.import Camera.FactoryCam;
부모 클래스의 기능을 그대로 물려 받을 수 있고
부모 클래스의 기능을 확장하여 사용 할 수도 있다.
단, 자식은 하나의 부모 클래스만 가질 수 있다.
클래스 간의 상속은 extends 키워드를 사용하여 정의한다.
public class 자식클래스 extends 부모클래스 {
}
상속관계는 IS-A 관계라고도 불린다.
예시)
부모클래스 : 카메라 / 자식클래스 : 공장카메라의 경우
공장카메라는 카메라다. (FactoryCam is a Camera.)
부모클래스 : 차 / 자식클래스 : 경찰차의 경우
경찰차는 차다. (police car is a car)
부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩이라고 한다.
오버라이딩을 사용하기 위해서는 세가지 조건이 필요한데,
알고리즘 문제 출처 : 프로그래머스 스쿨
1. 머쓱이보다 키 큰 사람
2. 배열 두배 만들기
3. 삼각형의 완성조건(1)
4. 중앙값 구하기
5. 짝수는 싫어요
6. 배열의 유사도
import java.util.ArrayList;
class Solution {
public int solution(int[] array, int height) {
ArrayList<Integer> answer = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (height < array[i]) {
answer.add(array[i]);
}
}
return answer.size();
}
}
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
answer[i] = numbers[i]*2;
}
return answer;
}
}
import java.util.Arrays;
class Solution {
public int solution(int[] sides) {
Arrays.sort(sides);
return sides[2] < sides[0] + sides[1] ? 1 : 2;
}
}
import java.util.Arrays;
class Solution {
public int solution(int[] array) {
Arrays.sort(array);
return array[(array.length-1)/2];
}
}
class Solution {
public int[] solution(int n) {
int arraySize = n % 2 == 1 ? n/2+1 : n/2;
int[] answer = new int[arraySize];
int i = 0;
int k = 0;
while(i <= n) {
if (i%2 ==1) {
answer[k] = i;
k++;
}
i++;
}
return answer;
}
}
import java.util.Objects;
class Solution {
public int solution(String[] s1, String[] s2) {
int answer = 0;
for (String str1 : s1) {
for (String str2 : s2) {
if (Objects.equals(str1, str2)) {
answer ++;
}
}
}
return answer;
}
}
알고리즘에도 익숙해졌는지 코드 작성은 수월했다.
물론 다른 분들 처럼 한 줄로 끝내버리지는 못하고 있다.
3주차를 끝내고 4주차와 5주차가 남았는데
5주차가 모두 종료된 이후 알고리즘을 다시 풀어보며
지금 작성한 코드와 비교하는 시간을 가질 예정이다.
그 때는 더욱 더 효율적으로 코드를 짤 수 있길..