quilt code

[Java] 클래스(1) 본문

daily/Java

[Java] 클래스(1)

김뱅쇼 2023. 1. 2. 21:20

1. 객체 지향 프로그래밍  OOP: Object-Oriented Programming

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

 

1) 객체란? 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것.

객체 정보(속성, 필드) : 데이터
동작(메소드) : 함수 

객체 모델링: 현실 세계의 객체를 소프트웨어 객체로 설계하는 것. 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정 

 

2) 객체의 상호작용

객체와 객체 간의 상호작용

 

3) 객체 간의 관계

객체는 개별적으로 사용될 수 있지만 대부분 다른 객체와 관계를 맺고 있음 

① 집합 관계 : 하나는 부품 하나는 완성품

② 사용 관계 : 객체 간의 상호작용. 다른 객체의 메소드를 호출하여 원하는 결과를 얻는 것

③ 상속 관계 : 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계

 

4) 객체와 클래스 

클래스: 자바에서의 설계도 

인스턴스: 클래스로부터 만들어진 객체

인스턴스화: 클래스로부터 객체를 만드는 과정

 

**하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있음

 

*객체 지향 프로그래밍 개발 3단계*

1 클래스 설계
2 설계된 클래스를 가지고 사용할 객체 생성
3 생성된 객체 이용

 

5) 클래스 선언

① 사용하고자 하는 객체를 구상했다면 그 객체의 대표 이름을 하나 결정하고 이를 클래스 이름으로 정함 

 

*식별자 작성 규칙*

하나 이상의 문자로 이루어져야 함
첫 글자에는 숫자가 올 수 없음
'$', '_'외의 특수문자는 사용 불가
자바 키워드 사용 불가

(클래스 이름은 한글이나 영어나 상관x, 영어는 대소문자 구분, 한글은 많이 사용되지 않음)

 

② 클래스 이름: '클래스 이름.java'로 소스파일 생성

**일반적으로 소스 파일당 하나의 클래스를 선언하지만 2개 이상의 클래스 선언도 가능 대신 public 붙이지 x

③ 클래스 선언 후, 컴파일했다면 객체를 생성할 설계도가 만들어짐.

 

6) 객체 생성과 클래스 변수

  • 클래스로부터 객체를 생성하려면 new 연산자 사용 : new 클래스(  );
  • new:  클래스로부터 객체를 생성시키는 연산자. new 연산자 뒤에는 생성자가 오는데 생성자는 클래스()의 형태를 가지고 있음
  • new 연산자로 생성된 객체는 메모리 힙 Heap 영역에 생성
  • new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴하도록 되어 있음->이 주소를 참조 타입인 클래스 변수에 저장해두면 변수를 통해 객체를 사용할 수 있음 

**클래스로 선언된 변수에 new 연산자가 리턴한 객체의 번지를 저장하는 코드*

 클래스 변수;
 변수 = new 클래스();
클래스 변수 = new 클래스();

 

7) 클래스의 구성 멤버

클래스 필드 : 변수(데이터)
메소드 : 동작
public class ClassName {  
  int fieldname; 필드: 객체의 데이터가 저장되는 곳
    ClassName() { ... } 생성자: 객체 생성 시 초기화 역할 담당
     void method() { ... } 메소드: 객체의 동작에 해당하는 실행 블록
}  

필드: 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳. 선언 형태는 변수와 비슷하지만 필드를 변수라고 부르지는 x. 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재

 

생성자: new 연산자로 호출되는 특별한 중괄호{ } 블록. 생성자의 역할은 객체 생성시 초기화 담당. 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비를 함 

 

메소드: 객체의 동작에 해당하는 중괄호 { } 블록. 중괄호 블록은 이름을 가지고 있는데 이것이 메소드 이름. 메소드를 호출하게 되면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행됨. 이때 메소드는 필드를 읽고 수정하는 역할도 하지만, 다른 객체를 생성해서 다양한 기능을 수행하기도 함. 메소드는 객체 간의 데이터를 전달하는 수단. 외부(호출한 곳)으로부터 매개값을 받아 실행에 이용하고, 실행 후 결과 값을 외부(호출한 곳)로 리턴할(돌려 줄) 수도 있음.

 

 

2. 필드  (변수와 비슷)

1) 필드: 객체의 고유 데이터, 객체가 가져야 할 부품, 객체의 현재 상태 데이터를 저장하는 곳

2) 필드 선언:

  • 클래스 중괄호 {   } 어디든 존재. 생성자 선언과 메소드 선언의 앞과 뒤 어떤 곳에서도 필드 선언 가능.
  •  but 생성자와 메소드 중괄호 {  } 블록 내부(지역변수)에는 선언 x. 
  • 초기값은 주어질 수도, 생략될 수도 있다 -> 지정되지 않는 필드는 자동으로 기본 초기값
  • 타입 필드 [ = 초기값] ; 

* 필드 타입별 기본 초기값*

기본 타입 정수타입 byte : 0
char : \u0000(빈공백
short :  0
int : 0
long : 0L
실수타입 float : 0.0F
double : 0.0
논리타입 boolean : false
참조 타입 배열 : null
클래스(String포함) : null
인터페이스 : null

3) 필드 사용: 필드값을 읽고 변경하는 작업 

  • 클래스 내부: 필드 이름으로 읽고 변경
  • 클래스 외부: 클래스로부터 객체를 생성한 뒤 필드 사용(why? 필드가 객체에 소속된 데이터이므로 객체가 존재하지 않으면 필드도 존재하지 않기 때문)

① heap에 name, id, pw, age / Member M = new member;

stack에 M 생성 -> heap의 주소값이 담김

M.name = 최하얀 -> heap의 null에 최하얀이 담김

④ M.age -> heap에서 M의 자료를 찾음

** 처음엔 null로 지정하고 필요할때 값 호출

 

 

 

 

'daily > Java' 카테고리의 다른 글

[Java] 클래스 (3)  (0) 2023.01.04
[Java] 클래스 (2)  (0) 2023.01.03
[Java] 참조타입 과제  (0) 2023.01.02
[Java] 열거 타입  (0) 2022.12.30
[Java] 조건문과 반복문 과제  (0) 2022.12.29