자바

자바 - 클래스 - 01

록's 2023. 1. 10. 17:17
728x90
반응형

객체 지향 프로그램

객체

  • 객체(object)란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것
  • 객체는 속성과 동작으로 구성. 자바는 이러한 속성과 동작을 각각 필드와 메소드라고부름

 

객체 지향 프로그래밍(OOP)

  • 객체 객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법

 

객체의 상호작용

  • 객체 지향 프로그램에서도 객체들은 다른 객체와 서로 상호작용하면서 동작
  • 객체가 다른 객체의 기능을 이용할 때 이 메소드를 호출해 데이터를 주고받음
int result = add(10, 20);
  • 매개값: 객체가 전달하고자 하는 데이터이며, 메소드 이름과 함께 괄호() 안에 기술
  • 리턴값: 메소드의 실행의 결과이며, 호출한 곳으로 돌려주는값
메소드(매개값1, 매개값2, ...);

 

 

 

객체 간의 관계

  • 집합 관계 : 완성품과 부품의 관계
  • 사용 관계 : 다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계
  • 상속 관계 : 부모와 자식 관계. 필드, 메소드를 물려받음

 

객체 지향 프로그래밍의 특징

  • 캡슐화 : 객체의 데이터(필드), 동작(메소드)을 하나로 묶고 실제 구현 내용을 외부에 감추는 것

 

  • 상속 : 부모객체가 자기 필드와 메소드를 자식 객체에 물려줘 자식 객체가 사용할 수 있게 함 -> 코드 재사용성 높이고 유지보수 시간 최소화

 

  • 다형성 : 사용 방법은 동일하지만 실행 결과가 다양함

 

 

 

객체와 클래스

 

 

클래스와 인스턴스

  • 객체 지향 프로그래밍에서도 객체를 생성하려면 설계도에 해당하는 클래스가 필요
  • 클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 부름
  • 클래스로부터 객체를 만드는 과정을 인스턴스화라고 함
  • 동일한 클래스로부터 여러 개의 인스턴스를 만들 수 있음

 

 

 

클래스 선언

 

클래스 선언 -> (설계도 작성)

  • 객체를 생성(생성자)하고, 객체가 가져야 할 데이터(필드)가 무엇이고, 객체의 동작(메소드)은 무엇인지를 정의
  • 클래스 선언은 소스 파일명과 동일하게 작성
// 클래스 선언
public class 클래스명 {
}
  • 클래스명은 첫 문자를 대문자로 하고 캐멀 스타일로 작성. 숫자를 포함해도 되지만 첫 문자는 숫자가 될 수 없고, 특수 문자 중 $, _ 를 포함할 수 있음
  • 공개 클래스 : 어느 위치에 있든지 패키지와 상관없이 사용할 수 있는 클래스

 

 

 

객체 생성과 클래스 변수

 

클래스 변수

  • 클래스로부터 객체를 생성하려면 객체 생성 연산자인 new가 필요
  • new 연산자는 객체를 생성시키고 객체의 주소를 리턴
클래스 변수 = new 클래스();
  • 라이브러리 클래스: 실행할 수 없으며 다른 클래스에서 이용하는 클래스
  • 실행 클래스 : main() 메소드를 가지고 있는 실행 가능한 클래스

 

 

 

클래스의 구성 멤버

생성자, 필드, 메소드

  • 필드 : 객체의 데이터를 저장하는 역할. 선언 형태는 변수 선언과 비슷하지만 쓰임새는 다름
  • 새성자 : new 연산자로 객체를 생성할 때 객체의 초기화 역할. 선언 형태는 메소드와 비슷하지만, 리턴 타입이 없고 이름은 클래스 이름과 동일
  • 메소드 : 객체가 수행할 동작. 함수로도 불림

 

 

 

필드 선언과 사용

필드 선언

  • 필드는 클래스 블록에서 선언되어야 함
타입 필드명 [ = 초기값 ] ;
  • 타입은 필드에 저장할 데이터의 종류를 결정. 기본 타입, 참조 타입 모두 가능
  • 초기값을 제공하지 않을 경우 필드는 객체 생성 시 자동으로 기본값으로 초기화
분류 데이터 타입 기본값
기본타입 정수타입 byte
char
short
int
long
0
\u0000 (빈 공백)
0
0
0L
실수타입 float
double
0.0F
0.0
논리타입 boolean false
참조 타입 배열
클래스(String 포함)
인터페이스
null
null
null

 

 

 

 

필드 사용

  • 필드값을 읽고 변경하는 것. 클래스로부터 객체가 생성된 후에 필드를 사용할 수 있음
  • 필드는 객체 내부의 생성자와 메소드 내부에서 사용할 수 있고, 객체 외부에서도 접근해서 사용할 수 있음

 

 

 

생성자 선언과 호출

 

기본생성자

  • 클래스에 생성자 선언이 없으면 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가
[public] 클래스() { }

 

생성자 선언

  • 객체를 다양하게 초기화하기 위해 생성자를 직접 선언할 수 있음
클래스(매개변수, ...) {
//객체에서 초기화 코드
}
  • 생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일
  • 매개변수의 타입은 매개값의 종류에 맞게 작성

 

 

필드 초기화

  • 객체마다 동일한 값을 갖고 있다면 필드 선언 시 초기값을 대입하는 것이 좋고, 객체마다 다른 값을 가져야 한다면 생성자에서 필드를 초기화하는 것이 좋음

 

 

 

생성자 오버로딩

  • 매개변수를 달리하는 생성자를 여러 개 선언하는 것

  • 매개변수의 타입, 개수, 선언된 순서가 똑같을 경우 매개변수 이름만 바꾸는 것은 생서자 오버로딩이 아님
  • 생성자가 오버로딩되어 있을 경우, new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 따라 실행될 생성자가 결정

 

 

다른 생성자 호출

  • 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있음
  • 이 경우 공통 코드를 한 생성자에만 집중적으로 작성하고, 나머지 생성자는 this(...)를 사용해 공통 코드를 가진 생성자를 호출
Car(String model) {
	this(model, "은색", 250);
}

Car(String model, String color) {
	this(model, color, 250);
}

Car(String model, String color, int maxSpeed) {
	this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
}

 

 

 

 

메소드 선언과 호출

 

메소드 선언

  • 객체의 동작을 실행 블록으로 정의하는 것.

  • 리턴 타입 : 메소드 실행 후 호출한 곳으로 전달하는 결과값의 타입
  • 메소드명 : 메소드명은 첫 문자를 소문자로 시작하고, 캐멀 스타일로 작성
  • 매개변수 : 메소드를 호출할 때 전달한 매개값을 받기 위해 사용
  • 실행 블록 : 메소드 호출 시 실행되는 부분

 

 

메소드 호출

  • 메소드 블록을 실제로 실행하는 것
  • 클래스로부터 객체가 생성된 후에 메소드는 생성자와 다른 메소드 내부에서 호출될 수 있고, 객체 외부에서도 호출될 수 있음
  • 외부 객체에서는 참조 변수와 도트(.)연산자로 호

 

 

 

 

 

 

 

 

가변길이 매개변수

  • 메소드가 가변길이 매개변수를 가지고 있다면 매개변수의 개수와 상관없이 매개값을 줄 수 있음
int sum(int ... values) {
}
  • 메소드 호출시 매개값을 쉼표로 구분해서 개수와 상관없이 제공 할 수 있음
  • 매개값들은 자동으로 배열 항목으로 변환되어 메소드에서 사용됨
int[] values = {1, 2, 3};
int result = sum(values);
int result = sum(new int[] {1, 2, 3});

 

 

 

 

return 문

  • 메소드의 실행을 강제 종료하고 호출한 곳으로 돌아간다는 의미
  • 메소드 선언에 리턴 타입이 있을 경우에는 return 문 뒤에 리턴값을 추가로 지정해야함
  • return 문 이후에 실행문을 작성하면 'Unreachable code' 라는 컴파일 에러가 발생

 

메소드 오버로딩

  • 메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러 개 선언하는 것

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형