코린이
혼공자 Chapter06. 클래스 본문
06_1 객체
객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으며 식별 가능한 것을 말한다.
EX) 자동차, 자전거, 책, 강의 등
속성
필드(field) + 동작 메th드(method)로 구성되어 있다.
객체를 만들고 이를 조립한 프로그램을 만드는 기법을 객체 지향프로그램이라고 한다.
객체와 객체 간의 상호작용
메소드를 통해 객체들이 상호작용
메소드 호출이란 객체가 다른 객체의 기능을 이용하는 것
int result = Calcuator.add(10, 20);
리턴한 값을 int 변수에 저장
리턴값 = 객체.메소드(매개값1, 매개값2)
클래스
객체를 만들기 위한 설계도
클래스로부터 만들어진 객체를 클래스의 인스턴스라고 한다. 그리고 클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.(하나의 클래스에서 여러 개의 인스턴스를 만들 수 있다.)
new 클래스(); 여기서 new는 클래스로부터 객체를 생성시키는 연산자이다.(생성자는 클래스 형태를 가지고 있다)
package ch1;
public class Car {
}
----------------------------------------------------------------------------------------
package ch1;
public class CarExample {
public static void main(String[] args) {
Car c1 = new Car();
System.out.println("c1 변수는 Car 객체를 참조한다.");
}
}
클래스로 선언된 c1에 new 연산자가 리턴한 객체의 번지를 저장하는 예시의 코드이다.
클래스의 구성 멤버
클래스에는 객체가 가져야 할 구성 멤버가 선언되는데, 필드(field), 생성자(constructor), 메소드(method)가 있다.
06_2 필드(Field)
클래스를 구성하는 하나의 요소로 클래스의 내부 멤버이다.
객체의 데이터를 저장하기 위한 역할을 담당한다.
필드 선언
클래스 중괄호{} 블록 어디든 존재할 수 있으며 생성자 선언과 메소드 선언의 앞 뒤 어떤 곳에서도 필드 선언이 가능
하지만 생성자와 메소드 중괄호{} 블록 내부에는 선언이 될 수 없다.
타입 필드[= 초기값];
필드 사용
클래스 내부의 생성자와 메소드에서 바로 사용이 가능 외부에서 사용 시 객체를 생성 후 참조 변수를 통해 사용해야 한다.
public class Car() {
//필드
int speed;
//생성자
Car() {
speed = 0;
}
//메소드
void method( ... ) {
speed = 10;
}
}
06_3 생성자(constructor)
new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당한다.
여기서 객체 초기화란 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 하는 것을 말한다.
new 연산자에 의해 생성자가 실행되면 힙 영역에 객체가 생성되고 객체의 번지가 리턴되어 클래스 변수에 저장을 한다.
public class 클래스 이름{
public 생성자(){}
}
생성자 선언
public class Car{
Car(String color, int cc){ //생성자
}
}
오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.
this(): 객체 자신의 또 다른 생성자를 호출할 때 사용한다.
//this()사용의 예
class Car { String color; int door; Car() { this(color, 4);
06_4 메소드(Method)
메소드 선언은 선언부와 실행 블록으로 구성 되어 메소드 선언부를 메소드 시그너처라고 한다.
리턴 타입: 메소드가 리턴하는 타입을 표시
메소드 이름: 메소드의 기능이 드러나도록 식별자 규칙에 맞게 이름을 지어준다.
매개 변수 선언: 메소드를 실행할 때 필요한 데이터를 받기 위한 변수를 선언
리턴타입 메소드이름([매개 변수 선언, ...]){ ... }
다음은 메소드를 선언한 코드이다
public class Calculator {
//메소드
void poweron(){
System.out.println("전원을 켭니다.");
}
int plus(int x, int y){
int result = x + y;
return result;
}
double divide(int x, int y){
double result = (double)x / (double)y;
return result;
}
void poweroff(){
System.out.println("전원을 종료합니다.");
}
}
public class CalculatorExample {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
myCalc.poweron();
int result1 = myCalc.plus(2, 3);
System.out.println("result1: " + result1);
byte x = 10;
byte y = 3;
double result2 = myCalc.divide(x, y);
System.out.println("result2: " + result2);
myCalc.poweroff();
}
}
메소드 오버로딩(overloading)이란 같은 이름의 메소드를 중복하여 정의하는 것을 말하며 자바에서는 한 클래스 내에 같은 이름의 메소드를 둘 이상 가질 수 없다. 하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성할 수 있다.
진짜 내용이 엄청 많고 어렵다고 생각한다. 더 적고 싶지만 내용이 산으로 가고 복잡해질까 봐 여기까지 하겠습니다.
'자바 > 혼공 학습단 10기' 카테고리의 다른 글
혼공자 chapter08 인터페이스 (0) | 2023.07.15 |
---|---|
혼공자 Chapter07. 상속 (0) | 2023.07.14 |
혼공자 2주차 미션 (0) | 2023.07.14 |
혼공자 1주차 3장~5장(2) (0) | 2023.07.07 |
혼공자 1주차 미션 JDK설치(1) (0) | 2023.07.04 |