본문 바로가기
728x90
반응형

back-end/JAVA43

25) 참조변수super, 생성자super() 25) 참조변수super, 생성자 super() 1. 참조변수super ≒ 참조변수this -객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재 -조상의 멤버를 자신의 멤버와 구별할 때 사용 참조변수super 인스턴스메서드(or생성자) 내에서만 사용 조상멤버와 자신멤버를 구별하기 위해 사용 참조변수this static메서드 내에서만 사용 lv와 iv를 구분하기 위해 사용 https://feastforall.tistory.com/29?category=999998 18) 객체지향-생성자 this(), 참조변수 this() 18) 객체지향-생성자 this(), 참조 변수 this() 18-1) 생성자 this() -생성자에서 다른 생성자 호출할 때 사용 Car()의 생성자가 3개 있습니다. .. 2021. 6. 3.
24) 메서드 오버라이딩(overriding), 오버로딩과 오버라이딩 차이 24) 메서드 오버라이딩(overriding), 오버로딩과 오버라이딩 차이 1. 정의 [override ⓥ덮어쓰다] -상속받은 조상의 메서드를 자신에 맞게 변경하는 것 2. 예제 Point클래스는 getLocation이라는 메서드가 있습니다. Point3D는 Point를 상속받았네요. Point3D는 상속받은 Point클래스에서 getLocation메서드를 오버라이딩 할겁니다. 내용을 살짝 추가해서 만드는 겁니다. 선언부는 절대 변경 불가이고, 구현부만 변경 가능합니다. (선언부와 구현부를 모르시는 분들은 이것부터 보세요) https://feastforall.tistory.com/20?category=999998 9) 객체지향-메서드의 정의, 메서드의 선언부와 구현부 9) 객체지향-메서드의 정의, 메서드.. 2021. 6. 3.
23) Object클래스 23) Object클래스 1. 정의 -모든 클래스의 조상 2. 특징 -부모가 없는 클래스는 자동으로 Object클래스를 상속받게 된다. -모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다(toString(), equals(Object obj), hashCode() 등등) 3. 예시 -부모가 없는 클래스는 자동으로 Object클래스를 상속받게 된다. Tv클래스는 부모를 상속받지 않으니, 자동으로 Object를 상속받게 된다. SmartTv는 부모클래스 Tv를 상속받는다. -모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다(toString(), equals(Object obj), hashCode() 등등) toString이라는 메서드를 만들지 않았지만, 자동으로 Obj.. 2021. 5. 31.
22) 단일상속(single inheritance) 22) 단일상속(single inheritance) 1. 정의 -java는 단일(하나의 부모만 상속) 상속만을 허용한다(C++은 다중상속 허용) 2. 에러 예시 class TvDVD extends Tv, DVD{ //에러. 조상은 하나만 허용됨. … } 3. 왜 쓰면 안될까? Tv클래스에 power() 메서드가 있고, DVD클래스에도 power()메서드가 있으면 TvDVD에서 power메서드 호출 시, 이름이 같아서 둘 중 어디 거를 써야 할지 모르는 상황이 발생한다(충돌) 4. 특징 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다. 충돌 문제가 발생하기 때문에 Tv는 상속시키고 DVD는 포함시킨다. 주의할 점은 DVD에 들어있는 메서드 사용 시, TvDVD클래스에서 메서드를 새로 생성해.. 2021. 5. 31.
21) 객체지향-클래스 간의 관계-포함(Composite) 21) 객체지향-클래스 간의 관계-포함(Composite) 1. 정의 -클래스의 멤버로 참조 변수를 선언하는 것 -작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만듦 2. 예시 Circle클래스의 3개의 변수를 선언합니다. 이제 이 클래스를 가지고 객체를 만들어볼게요. 이걸 구조화해볼게요. 그림으로 나타내 봅시다. Circle의 참조 변수 c는 3개의 변수를 가지고 있습니다. Point클래스로 x, y변수를 선언하고, Circle클래스로 Point객체를 생성하고 반지름을 추가해줍니다. 이제 Circle의 객체를 만들어줄게요. 이걸 구조화해볼게요. 그림으로 나타내 봅시다. 클래스 Test에서 객체를 생성해준 Cirlce의 참조 변수 c는 Point객체와 반지름 r을 포함하고 있습니다. Point.. 2021. 5. 31.
20)객체지향-클래스 간의 관계-상속(Inheritance) 20) 객체지향-클래스 간의 관계-상속(Inheritance) 1. 정의 -기존의 클래스로 새로운 클래스를 작성하는 것(코드의 재사용) -두 클래스를 부모와 자식의 관계 2. 형식 class 자식클래스 extends 부모클래스 { … } extends: 확장하다(즉, 'Parent를 확장해서 Child를 만들겠다'라는 뜻입니다) 3. 실제 구현 4. 특징 -자손은 '조상'의 모든 멤버를 상속받는다(생성자, 초기화블럭 제외) (‘부모’가 아니라 ‘조상’이라고 쓴 이유는 부모의 부모 즉, 할머니 할아버지 재산까지 상속받기 때문. 선택의 여지도 없고 그냥 주면 다 받아야 함, 얼굴 마음에 안 들어도 어쩔 거야.. 주신대로 물려받아야지) -자손의 멤버 개수는 조상보다 적을 수 없다(=같거나 많다) 5. 예시 조.. 2021. 5. 29.
19) 객체지향-변수의 초기화, 멤버변수의 초기화 19) 객체지향-변수의 초기화, 멤버변수의 초기화 19-1) 변수의 초기화 -지역변수(lv)는 수동 초기화해야 함(꼭!!!) method메서드에서 지역변수 i의 값을 모른 상태로 j에 대입하니 오류가 발생합니다. 인스턴스 변수는 직접 초기화하지 않아도 0으로 초기화됐었잖아요? 지역변수는 꼭 직접 초기화해야 합니다. 왜 그럴까요? 호출 스택은 쌓였다가 없어졌다가 메모리가 재사용이 빈번합니다. 그럼 메서드가 호출될 때마다 0으로 호출하면 성능이 떨어져요. 성능을 높이려고 항상 0으로 초기화 안 하고요. 새로운 값으로 덮어쓰는 방식으로 처리합니다. 지역변수의 경우, 메서드를 호출하는 경우에만 사용하기 때문에 짧게 쓰여요. 생명주기가 짧아요. 그런 변수를 0으로 자동 초기화시킨다? 메모리 낭비가 너무 심하죠. .. 2021. 5. 26.
18) 객체지향-생성자 this(), 참조변수 this 18-1) 생성자 this() -생성자에서 다른 생성자 호출할 때 사용 Car()의 생성자가 3개 있습니다. 1, 2 생성자가 3번째 생성자를 호출한 것입니다. 원래의 형태는 Car("white",auto",4)가 맞는데, Car를 쓰지 않고 this로 씁니다. 그냥 규칙입니다. 외우세요. this생성자의 실제 의미는 Car(String color, String gearType, int door)를 호출하라는 소리입니다. 18-2) 생성자 호출 시 주의사항 -다른 생성자 호출시 첫 줄에서만 사용 가능 Car(String color){ door = 5; Car(color, "auto",4); //에러! } 생성자끼리 호출할 땐 반드시 첫 번째 줄에서만 호출 가능합니다. 위에 또 다른 에러가 있죠? 다른 생.. 2021. 5. 25.
17) 객체지향-생성자(constructor)와 기본생성자(default constructor) 17-1) 생성자(constructor) -인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화 메서드' -인스턴스 생성 시 수행할 작업(iv초기화)에 사용 메서드인데, 객체가 생성될 때마다 초기화 해주는 메서드라고 보면 됩니다. Time t = new Time();//객체생성 t.hour = 12; t.minute = 34; t.second = 56; 여기서 시간, 분, 초는 처음에 0으로 기본으로 초기화됩니다. 하지만 우리가 시간, 분 초의 값을 12, 34, 56을 기본값으로 정해주는 겁니다. 근데 어떠세요? 매번 시, 분, 초를 세 줄로 적어야 하는 불편함이 있습니다. 그래서 Time t = new Time(12,34,56); //객체 생성과 초기화 이렇게 객체생성과 초기화를 한 줄로 쓰면 어떠세요.. 2021. 5. 25.
728x90
반응형