📆 2022년 07월 10일
⏰ 23시 00분 ~ 22시 00분
✍ 혼자 공부하는 자바(신용권)
1. 객체
- 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별 가능한 것
🗨 예를 들어,
물리적으로 존재하는 것 | 추상적으로 생각할 수 있는 것 |
자동차, 자전거, 책, 사람 등 | 학과, 강의, 주문, 등 |
- 객체는 속성과 동작으로 이루어져있다.
ex) 사람
속성 | 동작 |
이름, 나이, 등 | 웃다, 걷다 |
속성 : 필드 (field) 동작 : 메소드 (method)
◼ 객체 모델링 : 현실 세계의 객체를 소프트웨어 객체로 설계하는 것
-> 현실 세계 객체의 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 과정
2. 객체의 상호작용
1) 메소드 호츨
- 현실 세계에서 일어나는 모든 현상은 객체와 객체와 객체 간의 상호작용으로 이루어져 있다.
🙍♀️ 사람 -> 전자계산기의 기능을 이용
📇전자계산기 -> 계산 결과를 사람에게 알려주는 상호작용
- 소프트웨어도 마찬가지.
▪ 다른 객체와 서로 상호작용하면서 동작
▪ 상호작용 수단 -> 메소드
▪ 다른 객체의 기능을 이용하는 것 -> 메소드 호출
2) 메소드 호출 형태
리턴값 = 전자계산기객체.메소드(매개값1, 매개값2, ...);
ex) int result = Calculator.add(10, 20);
- 객체의 상화작용 : 객체 간의 메소드 호출을 의미
-> 매개값과 리턴값을 통해서 데이터를 주고받음.
3. 객체 간의 관계
- 객체는 개별적으로 사용될 수 있지만, 대부분 다른 객체와 관계를 맺고 있다.
- 종류 : 집합 관계, 사용 관계, 상속 관계
1) 집합 관계
- 하나는 부품, 하나는 완성품
ex) 자동차 = 엔진+타이어+핸들+etc
-> 자동차와 부품들은 집합 관계
2) 사용 관계
- 객체 간의 상호작용
- 객체 : 다른 객체의 메소드를 호출하여 원하는 결과를 얻어낸다.
ex) 사람은 자동차를 사용 --> 사람과 자동차는 사용관계
-> 사람은 자동차를 사용할 때 달린다, 멈춘다 등의 메소드를 호출
3) 상속 관계
- 상위(부모) 객체를 기반으로 하위(자식) 객체를 생성하는 관계
- 상위 객체 : 종류
- 하위 객체 : 구체적인 사물
ex) "자동차는 기계의 한 종류이다. " --> 상위 : 기계 / 하위 : 자동차
객체 지향 프로그래밍
완성품인 객체를 모델링하고, 집합 관계에 있는 부품 객체와 사용 관계에 있는 개체를 설계한 후 조립하는 방식의 개발 기법
4. 객체와 클래스
- 현실에서 객체를 갑자기 하늘에서 떨어지는 것이 아니라, 설계도를 바탕으로 제작
❕ 객체 지향 프로그래밍에서도 마찬가지 ❕
- 메모리에서 사용하고 싶은 객체가 있다면 설계도로 해당 객체를 만드는 작업 필요
1) 클래스 & 인스턴스
◾ 클래스(class) : 자바에서의 설계도
- 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
◾ 인스턴스(instance) : 클래스로부터 만들어진 객체
- 클래스로부터 여러 개의 인스턴스를 만들 수 있다.
2) 객체 지향 프로그래밍 개발 단계
① 클래스 설계
② 설계된 클래스를 가지고 사용할 객체 생성
③ 생성된 객체를 이용
5. 클래스 선언
- 클래스 이름: 사용하고자 하는 객체를 구상 후, 그 객체의 대표 이름을 하나 결정
ex) 사람 객체 : Person / 자동차 객체 : Car
1) 클래스 이름 작성 규칙
▫ 하나 이상의 문자로 이루어져야 한다. ex) Car, SportsCar
▫ 첫 글자에는 숫자가 올 수 없다. ex) Car, 3Car(x)
▫ $, _ 외의 특수 문자는 사용할 수 없습니다. ex) $Car, _Car, @Car(x), #Car(x)
▫ 자바 키워드는 사용할 수 없다. ex) int(x), for(x)
- 한글이든 영어든 상관없지만, 한글 클래스는 겅의 없다.
- 영어의 대소문자를 구분해야 한다.
- 단일 단어 : 첫 글자를 대문자로 하고 나머지는 소문자.
- 혼합 단어 : 각 단어의 첫글만 대문자.
2) 소스 파일 생성
- 소스 파일 이름 역시 대소문자를 구분하므로 반드시 클래스 이름과 대소문자가 같도록 해야 한다.
- 소스 파일을 생성하려면 소스 파일을 열고 다음과 같이 클래스를 선언한다.
public class 클래스 이름 {
}
- public class 키워드 : 클래스를 선언할 때 사용하며 반드시 소문자로 작성
- 클래스 이름 뒤 중괄호{ } : 클래스 선언의 시작과 끝을 알려준다.
- 보통 [ 소스 파일 1 : 클래스 1 ] 선언하지만, 2개 이상의 클래스 선언도 가능
6. 객체 생성과 클래스 변수
1) 객체 생성
- 클래스로부터 객체를 생성하려면 다음과 같이 new 연산자를 사용한다.
new 클래스();
◼ new : 클래스로부터 객체를 생성시키는 연산자
- 클래스() 형태의 생성자가 뒤따른다.
-> new 연산자로 생성된 객체는 메모리 힙 영역에 생성
2) 객체 사용
- 메모리 내에서 생성된 객체의 위치를 모르면 객체 사용 불가.
- new 연산자는 힙 영역에 객체를 생성 후 객체의 번지를 리턴.
----> 번지를 참조 타입인 클래스 변수에 저장해두면 변수를 통해 객체 사용 가능. 아래참고⬇
클래스 변수;
변수 = new 클래스();
/* 클래스 변수 선언과 객체 생성을 1개의 실행문으로도 가능 */
클래스 변수 = new 클래스();
3) 예제
- Student 클래스를 선언하고 StudentExample 클래스의 main()메소드에서 Student 객체 생성
// 클래스 선언 (Student.java)
public class Student{
}
//클래스로부터 객체 생성 (StudentExample.java)
public class StudentExample{
public static void main(String[] args){
Student s1 = new Student();
System.out.println("s1 변수가 Studnet 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
}
}
s1 변수의 Student 객체 ≠ s2 변수의 Student 객체
7. student와 studentexample 클래스의 용도
- 클래스에는 두 가지 용도가 있다.
① 라이브러리(API : Application Program Interface) 용 : 다른 클래스에서 이용할 목적으로 설계
② 실행용 : 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할
- 위의 예제에서는 Student가 라이브러리 클래스 이고 StudentExample는 실행 클래스이다.
8. 클래스의 구성 멤버
- 클래스에는 객체가 가져야 할 구성 멤버가 선언
- 구성 멤버 : 필드(Field), 생성자(Constructor), 메소드(Method)
public class ClassName {
int fieldname; //필드 : 객체의 데이터가 저장되는 곳
ClassName() { ... } //생성자 : 객체 생성 시 초기화 역할 담당
void methodName() { ... } //메소드 : 객체의 동작에 해당하는 부분
}
1) 필드
- 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
❌ 선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지 않는다. ❌
- 변수 : 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸
- 메소드 : 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재
2) 생성자
- new 연산자로 호출되는 특별한 중괄호{} 블록
- 객체 생성 시 초기화를 담당, 필드를 초기화하거나 메소드를 호출해서 객체를 사용할 준비
- 메소드와 비슷하게 생겼지만, 클래스 이름으로 되어 있고 리턴 타입이 없다.
3) 메소드
- 객체의 동작에 해당하는 중괄호{}
- 호출 시, 중괄호에 있는 모든 코드들이 일괄적으로 실행
⭐이때, 메소드는 필드를 읽고 수정하는 역할 + 다른 객체를 생성해서 다양한 기능을 수행
-> 메소드 : 객체 간의 테이터를 전달하는 수단, 외부로부터 매개 값을 받아 실행에 이용하고, 실행 후 값을 외부로 리턴할 수 있다.
'Java' 카테고리의 다른 글
[ch06 클래스] (0) | 2022.08.04 |
---|---|
[ch06 클래스] 생성자 (0) | 2022.07.20 |
[ch04 조건문과 반복문] (0) | 2022.07.18 |
[ch05 참조타입] 열거 타입 (0) | 2022.07.11 |
[ch05 참조타입] 배열 (0) | 2022.07.11 |