Programming 65

7-17 제어자(modifier)

-클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여 접근 제어자 public, protected, (default), private그 외  static, final, abstract, native, transient, synchronized, volatile, strictfp -하나의 대상에 여러 제어자를 같이 사용가능(접근 제어자는 하나만) static - 클래스의, 공통적인 (멤버변수, 메서드에 붙임)final - 마지막의, 변경될 수 없는 (클래스, 메서드, 멤버변수, 지역변수)    클래스 - 변경될 수 없는 클래스, 조상이 될 수 없는 클래스    메서드 - 변경될 수 없는 메서드, 오버라이딩 할 수 없는 메서드(변경 불가)    멤버변수 - 값을 변경할 수 없는 멤버변수(상수)..

7-12 패키지 / 7-15 import문

서로 관련된 클래스의 묶음클래스는 클래스 파일(*.class), 패키지는 폴더. 하위 패키지는 하위 폴더클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String)rt.jar는 클래스들을 압축한 (JDK설치경로\jre\lib에 위치 *java8 기준) *rt(runtime).jar(클래스 파일을 묶어놓은것)java9부터는 module 개념이 들어가서 rt.jar파일이 없다 패키지 선언- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 된다.- 패키지 선언이 없다면 이름없는(unnamed, default pakage)패키지에 속하게 된다. 클래스 패스(classpath)-클래스 파일(*.class)의 위치를 알려주는 ..

7-10 참조변수 super

-객체 자신을 가리키는 참조변수. 인스턴스 메서드(생성자) 내에만 존재-조상의 멤버를 자신의 멤버와 구별할 때 사용*this와 거의 같음 this는 lv와 iv구별에 사용하고 super는 조상멤버와 자신멤버 구별할 때 씀. super() - 조상의 생성자-조상의 생성자를 호출할 때 사용-조상의 멤버는 조상의 생성자를 호출해서 초기화★★★ 생성자의 첫 줄에는 반드시 생성자(this() or super())를 호출해야 한다. 그렇지 않으면 컴파일러가 생성자의 첫 줄에 super();를 삽입 ★생성자 첫 줄에서 조상클래스의 생성자를 호출해야하는 이유는 자손 클래스의 멤버가 조상 클래스의 멤버를 사용할 수도 있으므로 조상의 멤버들이 먼저 초기화되어 있어야 하기 때문이다.

7-7 오버라이딩(overriding)

- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것선언부는 바꿀 수 없고 내용만(구현부) 변경 가능 오버라이딩의 조건1. 선언부(반환타입, 메서드이름, 매개변수 목록)가 조상 클래스의 메서드와 일치해야 한다.2. 접근 제어자를 조상 클래스 메서드보다 좁은 범위로 변경할 수 없다.3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다. 오버로딩 vs 오버라이딩오버로딩(overloading) 기존에 없는 새로운 메서드를 정의하는 것(new)오버라이딩(overriding) 상속받은 메서드의 내용을 변경하는 것(change, modify)

7-1 상속

기존의 클래스로 새로운 클래스를 작성하는 것.(코드의 재사용)두 클래스를 부모와 자식으로 관계를 맺어주는 것. 자손은 조상의 모든 멤버를 상속 받는다.(생성자, 초기화블럭 제외)자손의 멤버 개수는 조상보다 적을 수 없다.(같거나 많다) - 상위클래스를 전부 상속받으니 멤버개수가 최소 같을 수 밖에 없다. 자식은 부모의 영향을 받고 부모는 자식의 영향을 받지 않는다 포함 관계클래스의 멤버로 참조변수를 선언하는 것작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다. 클래스 간의 관계 결정하기상속관계 '~은 ~이다.(is-a)'포함관계 '~은~을 가지고 있다.(has-a)' 90%이상이 포함관계이다. 상속은 제한이 많기 때문에 꼭 필요할때만 사용한다. 단일 상속(Single Inheritance)..

6 - 32 생성자 (constructor)

쓰는 이유: 초기화를 편리하게 하기 위해서 인스턴스가 생성될 때마다 호출되는 '인스턴스 초기화(=iv 초기화) 메서드'인스턴스 생성시 수행할 작업(iv 초기화)에 사용 생성자를 작성할때 지켜야 할 규칙들1. 이름이 클래스와 같아야한다.2. 리턴값이 없다.(void 안붙임) - 항상 반환값이 없다. 3. 모든 클래스는 반드시 생성자를 가져야 한다. Card c = new Card()  → (밑줄 부분이)생성자 호출: 기본생성자 기본생성자매개변수가 없는 생성자생성자가 하나도 없을때만, 컴파일러가 자동 추가 (생성자가 있으면 추가안함)기본생성자는 다른생성자가 있더라도 꼭 넣어줘야함(직접 꼭 만들어주면 좋음) 생성자 this()쓰는 이유: 코드의 중복을 제거하기 위해 (코드의 중복을 제거하려면 어느 한쪽이 다른..

6-26 static 메서드와 인스턴스 메서드

인스턴스 메서드인스턴스 생성 후, '참조변수.메서드이름()'으로 호출인스턴스 멤버(iv, im)와 관련된 작업을 하는 메서드메서드 내에서 인스턴스 변수(iv)사용 가능 static 메서드(클래스 메서드)객체생성없이 '클래스이름.메서드이름()'으로 호출인스턴스 멤버(iv, im)와 관련없는 작업을 하는 메서드메서드 내에서 인스턴스 변수(iv) 사용불가 객체는 iv묶음이라 할 수있다(다만 cv도 포함 될 수 있음)OOP핵심은 여러 객체가 서로 독립적인 고유한 상태를 가지는건데 인스턴스 변수가 각 객체의 고유한 상태를 유지하는데 사용되기 때문이다.iv가 필요없다는 뜻은 객체가 필요없다는 뜻이다. ex)Math함수 메서드를 만들었을 때 static을 붙일지 말지 결정하는 기준: 인스턴스 변수(iv)를 사용하지 ..

6-9 클래스의 정의

클래스 == 데이터 + 함수 변수: 하나의 데이터를 저장할 수 있는 공간배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간 구조체: 서로 관련된 여러 데이터(종류 관계X)를 하나로 저장할 수 있는 공간 (다른 타입도 묶을 수 있음)클래스: 데이터와 함수의 결합(구조체 + 함수) 선언 위치에 따른 변수의 종류변수의 종류선언 위치생성 시기클래스 변수(class variable)클래스 영역*클래스가 메모리에 올라갈 때 인스턴스 변수(instance variable)★인스턴스가 생성되었을 때지역 변수(local variable)클래스 영역 이외의 영역(메서드, 생성자, 초기화블럭 내부)변수 선언문이 실행되었을 때 *클래스가 필요할 때 메모리에 올라간다. CPU / SSD or HDD :  CPU는 S..