분류 전체보기 146

추상클래스 (abstract class) / 추상 메서드 (abstract method)

📌 추상클래스 (abstract class) : 미완성된 클래스 추상클래스로 인스턴스를 생성할 수 없다. 추상클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다. 추상클래스 자체로는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서 중요한 의미를 갖는다. 새로운 클래스를 작성할 때 아무 것도 없는 상태에서 시작하는 것보다는 완전하지는 못하더라도 어느정도 틀을 갖춘 상태에서 시작하는 것이 나을 것이다. 추상 클래스 선언하는 방법 - 클래스 선언부의 abstract를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주어야 한다고 쉽게 알 수 있다/ abstract class 클래스 이름{ ... } 추상클래스에도 생성자가 있으며, 멤버변수와 메..

다형성(polymorphism)

📌 다형성? : 여러 가지 형태를 가질 수 있는 능력 상속과 함께 객체지향개념의 중요한 특징이며, 상속과 깊은 관계가 있다. 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다. ⚠️ 인스턴스 타입과 일치하는 참조변수를 사용하면 인스턴스의 멤버들을 모두 사용할 수 있을 텐데 왜 조상타입의 참조변수를 사용해서 인스턴스의 일부 멤버만을 사용하도록 하는 것일까? - 어떤 참조변수를 사용하느냐에 따라 사용할 수 있는 멤버의 개수가 다르다. - 또한 조상클래스와 자손클래스에 동일한 멤버변수가 정의되어있다면, 어떤 참조변수를 사용하느냐에 따라 서로 다른 결과를 얻는다. (참조변수와 인스..

[프로그래머스] 단어변환 ( level.3) / JAVA / DFS

https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 1. String 값 비교는 == 이 아닌 equals 사용할 것. 2. 문제 변수 잘 생각해볼것. 여기서 헤맸는데, hot -> dot 비교할때 오직 전체길이 3개중에서 2개만 맞으면 바꿀 수 있는 경우라 생각해서 코드를 짰다. 그런데 그렇게 하면 hit -> pht 인 경우도 바꿀 수 있다고 판단하기 때문에 오류가 ..

Algorithm Study 2022.06.03

[프로그래머스] 타겟넘버 (level.2) / JAVA / DFS

https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 programmers.co.kr - 난 왜 이걸 완전탐색문제라 생각하고 풀었지? - 어쨌든, 재귀 문제이면서 깊이우선 탐색이므로 DFS 문제인것 같다. number[index] 가 + 인 경우와 - 인 경우 둘 다 해야하므로, 해당 함수를 두번 호출하면 된다. 1) - 해주는 경우 : solve(numbers, index+1, sum-numbers[index],targe..

Algorithm Study 2022.06.03

제어자/ static / final/ abstract / public / protected/ default / private

제어자 ( modifier) : 클래스, 변수, 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 접근제어자와 그 외의 제어자로 나눌 수 있다. 접근 제어자 : public, protected, default , private 그 외 : static , final, abstract, native, transient, synchronized, volatile, strictfp static : 공통적인, 클래스의 static 은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다. 클래스변수(static변수)는 모든 인스턴스가 공유하기 때문에, 인스턴스에 관계없이 같은 값을 갖는다. static 이 붙은 멤버변수와 메서드는 인스턴스를 생성하지 않고도 사용할 수 있다. 인스턴스 메서드..

오버라이딩(overriding) / 오버로딩 (overloading) / super / super()

오버라이딩 (overriding) : 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 상속받은 메서드를 자손 클래스에 맞게 변경하는 경우, 조상의 메서드를 오버라이딩 한다. override : ~위에 덮어쓰다 (overwrite) class Point{ int x; int y; String getLocation() { return "x :" + x + ", y" + y; } } class Point3D extends Point{ int z; //오버라이딩 String getLocation() { return "x :" + x + ", y" + y + ", z" + z; } } 오버라이딩의 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 1. 이름이 같아야 한다. 2. 매개변수가..

상속(inheritance) / 포함(Composite) 관계

상속 : 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 장점 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성을 높이고 유지보수를 편리하게 한다. 사용법 - extends 상속 받고자하는 클래스명 - 상속을 받는다 = 조상클래스를 확장한다 => extends class Parent {...} class Child extends Parent {...} 위 두 클래스는 서로 상속관계에 있다고 하며, 상속해주는 클래스를 '조상클래스'라 하고 상속받는 클래스를 '자손클래스'라고 한다. 조상 클래스 : 부모(parent)클래스, 상위(super)클래스, 기반(base)클래스 자손 클래스 : 자식(child)클래스, 하위(sub)클래스, 파생된(derived)클래스 Child클래스는 Par..

아이템35. ordinal 메서드 대신 인스턴스 필드를 사용하라

아이템35. ordinal 메서드 대신 인스턴스 필드를 사용하라 열거 타입 상수는 열거 타입에서 몇 번째 위치인지를 반환하는 ordinal 메서드를 제공한다. 다만, 상수 선언의 순서가 바뀌거나 값의 중간이 없는 경우 ordinal을 쓰는 것은 좋지 않다. 해결책으로 열거 타입 상수에 연결된 값은 ordinal 메서드 대신, 인스턴스 필드에 저장하자. // ordinal을 잘못 사용한 예 - 따라하지 말 것 public enum Ensemble{ SOlO, DUET, TRIO, OCTET, NONET; public int numberOfMusicians() { return ordinal() + 1; } } public enum Ensemble{ SOlO(1), DUET(2), TRIO(3), OCTET(..

JAVA/Effective Java 2022.05.30

아이템34. int 상수 대신 열거 타입을 사용하라

아이템34. int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 열거타입 정리 참조 1. 정수 열거 패턴 기법 public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL =0; public static final int ORANGE_TEMPLE =1; public static final int ORANGE_BLLOD = 2; 단점 타입 안전을 보장할 방법이 없으며 표현력이 좋지 않다. if(A..

JAVA/Effective Java 2022.05.30