✨기본 미션 및 선택 미션 인증
✨ Chap 6 -1 객체 지향 프로그래밍
객체
- 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것
- 객체에는 속성(필드)과 필드(동작)으로 구성됨
- 객체 모델링 : 현실 세계의 객체를 소프트웨어 객체로 설계하는 것
객체의 상호작용
- 객체들은 각각 독립적으로 존재하고, 다른 객체와 서로 상호작용 하면서 동작한다.
- 객체들 사이의 상호작용 수단은 메소드이다.
- 이때 객체가 다른 객체의 기능을 이용하는 것이 메소드 호출이다.
메소드 호출
리턴 값 = 전자계산기객체.메소드(매개값1, 매개값2, ...);
int result = Calculator.add(10,20);
// 리턴 값을 통해서 데이터를 주고 받음
객체와 클래스
객체를 생성하기
- 클래스 : 설계도
- new 연산자 : 클래스를 객체로 만들어줌
- 인스턴스 : 클래스로부터 만들어진 객체
- 인스턴스화 : 클래스를 new 연산자를 통해 객체로 만드는 과정
new 연산자
클래스 변수 = new 클래스(); //클래스 변수 선언과 객체 생성 Student s1 = new Student();
- new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가지고 있다.
- new 연산자를 사용한 만큼 객체가 메모리 heap영역에 생성된다.
개발자 → 설계 → 클래스(설계도) → 인스턴스화(new 생성) → 인스턴스 (객체)
- 설계도는 클래스로, 클래스로 만든 객체는 인스턴스
클래스의 두 가지 용도
- 라이브러리 클래스 : 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다. (필드, 생성자, 메소드)
- 실행 클래스 : main() 메소드 제공(실행하기 위한 코드)
클래스의 구성 멤버
필드(Field) | 객체의 데이터가 저장되는 곳 생성자와 메소드 전체에서 사용, 객체가 소멸되지 않는 한 객체와 함께 존재 |
생성자 | 객체 생성 시 초기화 역할 담당 클래스 이름으로 돼 있고, 리턴 타입이 없다 |
메소드 | 객체의 동작에 해당하는 실행 블록 |
다음은 클래스의 구성 멤버에 대해서 자세히 알아보도록 하겠습니다!
✨ Chap 6 -2 필드
필드
- 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳이다.
필드 선언
타입 필드 [ = 초기값 ] ;
String company = "현대자동차";
int maxSpeed = 300;
int currentSpeed; //초기값이 저장 되지 않아도 객체 생성 시 자동으로 기본 초기값으로 설정됨
필드 사용
- 클래스 내부의 생성자와 메소드에서 바로 사용이 가능하다
- 클래스 외부에서 사용할 경우 클래스로부터 객체를 생성한 뒤 필드를 사용해야된다
//클래스 외부에서 필드 값 사용하기
Car myCar = new Car(); //객체 생성
myCar.company = "기아자동차"; //필드 값 변경
✨ Chap 6 -3 생성자
생성자
- 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
- 객체 초기화 : 필드를 초기화, 메소드를 호출해서 객체를 사용할 준비를 하는 것
기본 생성자
- 클래스 내부에 생성자 선언을 생략했다면 컴파일러가 기본 생성자를 자동으로 추가해준다.
- 클래스에 선언한 생성자가 1개라도 있으면 컴파일러가 기본 생성자를 추가하지 않는다
생성자 선언
- 리턴 타입이 없고 클래스 이름과 동일하다
- 매개 변수 선언은 생략할 수도 있고 여러 개를 선언 가능 또한 new 연산자로 생성자를 호출할 때 외부의 값을 생성자 블록 내부로 전달하는 역할을 한다.
public class Car{
//생성자
Car(String model, String color, int maxSpeed){...}
}
public class CarExampe{
public static void main(STring[] args){
Car myCar = new Car("검정", 3000);
//Car myCar = new Car(); (x) -> 클래스에서 이미 생성자를 선언했으므로 기본 생성자를 호출할 수 없다
}
}
필드 초기화
this.
- 필드와 매개 변수의 이름이 동일할 때는 필드 앞에 this.을 붙여줌(구분)
public Korean(String name, String ssn ){
this.name = name;
this.ssn = ssn;
}
생성자 오버로딩
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- 매개 변수의 타입, 개수, 순서를 각각 다르게 선언해야 된다
다른 생성자 호출: this()
- 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.
- 이 경우 필드 초기화 내용은 한 생성자에게만 집중적으로 작성하고
- 나머지 생성자는 초기화 내용을 가지고 있게 한다.
✨ Chap 6-4 메소드
- 메소드 선언은 선언부(리턴 타입, 메소드 이름, 매개 변수 선언)와 실행 블록으로 구성됨
리턴 타입
- 메소드가 리턴하는 결과의 타입을 표시한다
- 리턴 타입이 없으면 void로 지정
- 리턴 타입이 있으면 리턴값의 타입을 작성
메소드 이름
- 숫자로 시작하면 안 되고 , $와 _를 제외한 특수 문자를 사용하지 말아야 한다.
- 관례적으로 메소드 이름은 소문자로 작성
- 뒤이어 오는 단어의 첫 글자는 대문자로 작성한다.
- 메소드가 어떤 기능을 수행하는지 알 수 있도록 기능 이름으로 지어주는 것이 좋다!
매개 변수 선언
- 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용된다.
메소드 오버로딩
클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
매개값을 다양하게 받아 처리할 수 있도록 한다.
매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다.
int plus(int x, int y){
int result = x-y;
return result;
}
double plus(double x, double y){
double result = x+y;
return result;
}
✨ Chap 6-5 인스턴스 멤버와 정적 멤버
인스턴스 멤버
- 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드
- 인스턴스 필드와 메소드는 객체에 소속돼 있으므로 객체 없이는 사용할 수 없다
public class Car{
//필드
int gas;
//메소드
void setSpeed (int speed){...} //int spped 필드를 사용했으므로 메소드는 인스턴스 멤버다
}
정적 멤버
- 클래스에 고정된 멤버
- 객체를 생성하지 않고 사용할 수 있는 필드와 메소드다.
- 필드와 메소드 선언 시 static 키워드를 추가적으로 붙인다.
- 정적 메소드 선언시 내부에 인스턴스 필드나, 인스턴스 메소드를 사용할 수 없다.
- this. 키워드도 사용이 불가능하다.
정적 멤버 선언
public class Calculator{
String color;
static double pi = 3.141592; //고정
}
정적 멤버 사용
public class Calculator{
static double pi = 3.141592;
static int plus(int x, int y) {...}
static int minus(int x, int y) {...}
}
double result1 = 10*1-*Calculator.pi;
int result2 = Calculator.plus(10,5);
int result3 = Calculator.minus(10,5);
final 필드
- 초기값이 저장되면 실행 도중에 수정할 수 없다는 것이다.
- final 타입 필드 [= 초기값];
상수
- 불변의 값(static final)
- 원주율 파이나 지구의 무게 및 둘레를 구할 때 사용
- static이면서 final이어야 한다 (클래스에만 존재)
public class EArth{
static final double EARTH_RADIUS = 6400;
static fianl double EARTH_AREA = 4*Math.PI * EARTH+RADIUS * EARTH+RADIUS;
}
publid class EarthExample{
public static void main(STring[] args){
System.out.println("지구의 반지름 : "+ Earth.EARTH_RADIUS + "km");
System.out.println("지구의 표면적 : "+ Earth.EARTH_AREA + "km^2");
}
}
✨ Chap 6-6 접근 제한자
접근 제한 | 적용 대상 | 접근할 수 없는 클래스 |
public | 클래스, 필드, 생성자, 메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 자식 클래스가 아닌 다른 패키지에 소속된 클래스 |
default | 클래스, 펠드, 생성자, 메소드 | 다른 패키지에 소속된 클래스 |
private | 필드, 생성자, 메소드 | 모든 외부 클래스 |