전체 글520 추상 클래스 와 추상 메서드 추상 클래스 : 객체화 하는것이 목표가 아니라, 설계를 하는것이 목표일 때 만드는 클래스. 특징 : 1. 추상클래스는 객체화가 불가능 하다. (인스턴스화가 될 수 없다) 2. 하위클래스들의 기준이 된다. => 단순 기준이 되는게 목표이기 때문에 객체를 만들 필요가 없는 개념 이다. 사용방법 : class 앞에 abstract를 붙혀 준다 ! 예시) 추상메서드 : 동일하게 메서드 앞에 abstract 를 붙히면 추상 메서드가 된다. 특징 : 1. Shape 클래스를 상속받은 모든 하위 클래스들은 abstract가 붙은 이 draw() 메서드를 무조건 사용 해야 한다는 특징을 갖게 된다. 2. 추상메서드는 중괄호 영역을 가질 수 없다. == 메서드 바디를 버린다. 이유 : 어차피 하위클래스에서 이 메서드를 .. 2023. 5. 17. 로그 로그는 말그대로 기록을 뜻하는 단어이다. 로그는 단순 연산도 기록 할 수 있지만 보통 메서드 위주로 기록 한다. 오류가 발생시 어떤 액션 + 어떤 기능에서 발생 했는지가 기록 된다. stu.name = "홍길동"; 처럼 대입 연산자를 사용하게 되면 메서드가 아니기 때문에 로그에 남지 않는다고 가정하면, stu.setName("홍길동"); 처럼 메서드를 사용하게 되면 로그에 남는 다는 의미 이다. +++ 하나의 코드로 여러 개발자들이 동시에 작업을 하게 되는데, 이럴 경우 프로젝트 완성시 기여도가 다르게 된다. 기여도가 어떤지 로그로 측정이 가능하다. 2023. 5. 17. (접근)제어자 private 과 getter,setter public => 자바는 public이 디폴트 이다. 단순 연산자로부터의 접근을 막고 싶을 때, private 을 붙힌다. (stu.name = "홍길동" 처럼) 1. private : 해당 클래스 안에서만 접근이 가능 하다. 2. 그러기 때문에 객체와 무관한 (static) 것 빼고는 모든 멤버변수에 private를 붙혀준다. 3. 접근제어자 private 는 "캡슐화" 와 많이 관련 되어 있다. 캡슐화 : https://hwanii96.tistory.com/19 예시) 그러면 main() 에서 stu.name 처럼 표현 하게 되면 멤버변수 자체가 private 설정이 된 상태라, Student 라는 클래스안에 멤버변수 name이 보이지 않는다는 말이다. (외부에서 직접적으로 멤버변수 name의 값에 .. 2023. 5. 17. 객체 지향 언어 메모 23.05.17 1. 멤버변수 갯수 파악하기 2. 멤버변수를 생성자에서 초기화 하기. 1) 자료형을 알아야 초기화가 가능. 2) 자료형에 맞춰서 값을 설정 가능. 1. this. this() 2. 객체 배열 개념 3. 상속 관계 일때 super() 4. private -> getter, setter 5. 상속 관계 일때 오버라이딩 6. [ 추상화 ] 설계에 필요한 클래스(객체화 할 필요가 없을 때) abstract 7. [ 캡슐화 ] private + getter, setter 8. [ 상속 ] extends 코드 재사용성 증가 9. [ 다형성 ] A, B, C 객체가 동일한 기능을 수행했어도, 서로 다른 효과가 나타나야할때 => 다형성을 실현 시켜야 하는구나 ! == 동적바인딩 2023. 5. 17. equals 메서드 오버라이딩 23.05.17 1. 최상위 클래스인 object 클래스에서 equals 메서드를 가져와서 오버라이딩을 하는 상황. 2. (Object obj) 는 equals가 비교할 대상을 의미 한다. 3. Pokemon pokemon 은 객체가 선언만 된 상태를 의미 한다. 예) String name; String 타입의 변수 name이 선언만 된 상황. 마찬가지로, 사용자 정의타입인 Pokemon 타입의 참조변수 pokemon은 선언이 된 상황 이다. 4. 상위클래스의 변수 obj를 Pokemon 타입으로 다운캐스팅 해서 그것을 참조변수 pokemon에 대입. 5. 여기서 생각해야하는건, 이 메서드는 객체와 객체를 비교하려고 하는 상황. 6. this.name 이랑 pokemon (참조변수).name 은 같아? .. 2023. 5. 17. 클래스에서의 타입 변환 피카츄 객체 2개를 비교해서 같으면 알을 획득 하고, 다르면 알을 못얻는 상황일 때, 기존에 equals 메서드는 String 타입을 비교할 때 사용했었다. String은 기본형 타입이 아니라, 참조형 타입이기 때문에 즉, equals 메서드는 주소를 비교한다. 참고로, (비교)연산자 (==) 의 대상은 객체가 될 수 없다. 암튼, 참조변수 pika1과 참조변수 pika2는 주소값이 서로 다르므로 절대로 같다는 결과를 얻을 수 없게 된다. 그런데, 서로 다른 객체지만 객체가 가지고 있는 인스턴스 변수인 이름이 서로 같으면 알을 획득 하는 것을 요구 했다. 즉, 피카츄 이름이 같으면, 알을 얻는것 이다. 여기서 이러한 생각을 해볼 수 있다. 상위 클래스의 메서드를 유사한 기능으로 내 입맛대로 사용하고 싶다.. 2023. 5. 16. 상속 문제 짚고 넘어갈 점 : 1. PI가 3.14 인건 불변의 법칙이므로, final을 사용하여 상수를 알림. 2. 또한, 객체와 무관한 불변의 법칙이므로, static을 사용하기 3. 이럴 경우, 특정 객체 내부에서만 사용되는 인스턴스변수가 아닌, 한 클래스 내에서 모두 공유하고있는 클래스변수임을 알리기 위해 this.PI 가 아니라 클래스명.PI 라고 표기해 주기. (Circle.PI) 4. 부모 클래스를 먼저 코딩하고, 끝난 후에 자식 클래스를 코딩 하기. 5. 멤버변수 모두 초기화가 됬는지 확인. 멤버변수 = 클래스 변수 + 인스턴스 변수 2023. 5. 15. 상속 4 오버라이딩 (Overriding) : 기존의 부모 클래스가 가지고 있는 기능을 조금 변형해서 구현 하고 싶다 ! == 메서드를 재정의 => 메서드를 재정의 한것이므로, 상속 관계일 때만 발생할 수 있고, 메서드의 시그니쳐가 같아야 한다. VS 오버로딩 (Overloading) : 함수명 중복 정의를 허용 ! 1. 메서드 이름이 같아야 한다. 2. 매개변수의 개수 또는 타입이 달라야 한다. 3. 반환 타입은 관계없다. => 대표적인 예시 println(); 상속과 무관하고, 메서드 시그니쳐가 달라야 한다. 괄호안에, String타입이 와도, int타입이 와도 모두 ok. 오버라이딩 예시 기능이 유사하면 메서드의 이름을 통일 r.print(); 를 하면, 부모의 print() 메서드가 아니라, 자식의 pri.. 2023. 5. 15. 상속 3 부모의 디폴트 생성자 대신에, 다른 생성자를 활용 하는 방법 예시) 1. 부모의 생성자의 인자값이 String타입으로 1개. 2. 부모의 생성자를 활용해서 자식의 생성자에 super() 메서드를 사용 한다. 만약에, 자식 클래스에서 이름을 고정값으로 두고 싶다 하면 아래와 같이 표현 하면 된다. 학생 객체를 생성하면, 이름은 고정값이기 때문에, 객체에서 int score 인자값만 맞춰주면 되는 것이다. 2023. 5. 15. 이전 1 ··· 51 52 53 54 55 56 57 58 다음