※ chap4
ex) 전구
상태 = 필드 = 변수 : 켜짐(on), 꺼짐(off)
동작 = 메서드 : 켜다(turnOn()), 끄다(turnOff())
부모(상위클래스)에게 받은 건물(기능,필드)은 자식(하위클래스)이 마음대로 사용할 수 있다.
- animal 클래스: 목소리, 다리 개수, 눈..
- 독수리 클래스: 날개
- 물고기 클래스: 아가미, 비늘
-> 상위클래스: 공통 사항
-> 하위클래스: 상세 특징
-> 자식이 가진것이 많다.(부모는 자식에게 주지만, 자식은 부모에게 주지 않는다.)
※ chap4 - oop(object oriented programming: 객체 지향)
move 메서드 하나로 각 객체들의 움직임(결과)이 fly, run, swim으로 달라짐
상속과 다형성의 장점: 코드 재사용성을 높이고 유지 보수 시간을 최소화환다, 가독성이 높다.
접근지정자 class 클래스명 {
자료형 변수명 = 값; //필드
자료형 메서드명 {
기능 } //메서드
}
: Ball(자료형)을 담을 myBall(변수명)에 새로운 정보(new Ball())을 담을거야!
1. 공은 담을거야: 자료형 = Ball
2. 내 공의 이름은? : 변수명 = myBall
3. 새로운 공의 정보를 담아야지! : new Ball()
4. 어디에? 내 공에! > 내 공(myBall)에 공의 정보(new Ball())를 담는다. : =
- x
- 캡슐화(정보은닉), 상속, 다형성
- class
- 필드(멤버변수, 속성), 메서드(멤버함수, 동작)
생성자: 객체를 만들어주는 것.
new연산자로 객체를 생성할 때 객체의 초기화 담당
: Car 클래스의 color 변수 기본값 = "검정"
자바가 만들어주는 기본생성자가 있다.
: 컴파일러가 자동으로 만들어주는 것
Car () { }
- 3
:지역변수 기본값 없어 초기화 필수다.
:필드(멤버변수,class가 가진 변수)는 기본값이
있다. int = 0
:지역 변수는 선언된 장소에서만 사용 가능하다.
- 생성자(Constructor)
- Circle c = new Circle();
syso(c.radius) // 10
class안에 생성자를 따로 만들지 않으면 기본생성자가 있다.
기본생성자: 클래스명()
기본생성자가 아닌 다른 생성자를 만들면 컴파일러가 기본생성자를 만들어주지 않는다.
-> 추가 생성자를 만들었을 시, 반드시 기본생성자를 함께 만들어줘야 기본생성자 사용이 가능하다.
- x
:class를 이용해 객체를 생성하도록 해주는 것.
:생성자의 반환 타입은 없다.
- x
: 기본생성자는 컴파일러가 만들어준다.
- o
- x
: 반드시x. 기본은 public으로 선언하나 private도 가능.
- 접근자(getter), 설정자(setter)
: 캡슐화(public > private)하면 외부에서 사용 가능하도록, 접근하고(get) 값을 바꿔줄(set) 것들이 필요하다.
ex) 학번, 카드번호
-> 공유해서 사용해야 하는 값을 가진 변수에 static을 사용한다.
ex) 학번을 생성하는 방법, 카드번호생성방식..
-> 프로그램 시작하자마자 main이 실행되므로 스택과 데이터영역의 큰 차이는 x
객체(object): 현실에 있는 것을 프로그램 안에서 만들어낸 것. 인스턴스
객체지향 프로그램 : 캡슐화(정보은닉), 상속, 다형성
- 4
: 필드는 자동초기화된다.
: 생성자는 객체 생성을 위해 new 다음에 쓰는 것. 기본생성자 자동으로 만들어준다. 생성자이름은 클래스명과 똑같아야 한다.
public 클래스명() { }
: ★new연산자로 객체를 생성할 때 객체의 초기화 담당 = 기본연산자 사용시 객체의 필드를 초기화한다.
:변수를 먼저 쓰는 것은 약속일 뿐, 법칙은 아니다.
- 2
- x
:하나의 설계도로 여러 붕어빵 만들 수 있다.
- o
:정적 = static > 모든 애들이 공유
:String 클래스를 new를 쓰지 않고 사용한다!
: 결국 문제에서 '객체를 생성하지 않고도' 라는 말은, '생성자 사용하지 않고' 라는 말이다.
- x
: Q) 내(ShowError) 안에서 나(new ShowError)를 만들 수 있을까?
-> 있다. class안에서 main안에 class 사용 가능하다.
- 다형성
- Util u = new Util();
: 생성자를 사용해야 Util 클래스의 기능을 사용할 수 있다.
: 하나의 파일이다
왜? public은 하나만 사용 가능하다. > 위 파일명: MathTest.java
: findPi()는 메서드(생성자는 클래스명과 같아야한다. 아니니까 생성자 아님)
★8. 3, 1
Q) static 알아? 생성자 호출하면 초기화되는거 알아?
:sk클래스의 변수 i는 static > sk객체 100개를 만들어도 i값은 1개
:ok클래스는 static X > ok객체 100개 만들면 i값도 100개
:new Sklass(); , new Oklass(); 의미: 생성자 호출하고 저장하지 않고 버림.
(cf) Sklass s = new Sklass(); : 생성자 호출하여 s 변수에 저장.new Sklass(); //int i = 0(초기화) > i++ > i = 1 new Sklass(); //i = 1 > i++ > i = 2 Sklass() s = new Sklass(); //i = 2 > i++ > i = 3 new Oklass(); //int i = 0(초기화) > i++ > i = 1 new Oklass(); //int i = 0(초기화) > i++ > i = 1 Oklass o = new Oklass(); //int i = 0(초기화) > i++ > i = 1
s.i = 3
o.i = 1
- this("no name")이 syso("no argument") 위로 올라가야 한다.
: this() 자기자신의 메소드를 호출. super()와 함께 항상 생성자의 첫 행에 존재해야 한다.
- public static void show()
: static 선언 > 프로그램 실행되기 전에 데이터영역에 저장
: static 없으면 show(); 함수 호출해도 찾지 못하므로 오류.
: show 함수를 먼저 쓰고 호출하는 식으로 순서를 바꿔도 똑같이 오류.