[JAVA] 객체지향프로그래밍(OOP) 2
@욕심쟁이
·2020. 8. 12. 16:40
객체란(object)?
- 자신의 속성을 가지고 있으면서 식별가능한 것
- 속성(구성요소)과 동작(기능)으로 구성
- 이 속성과 동작을 각각 멤버변수(필드)와 메소드(method)라고 함
- 객체들 사이의 상호작용 수단 : 메소드
객체와 클래스
- 메모리에서 사용하고 싶은 객체가 있다면 우선 서계도로 해당 객체를 만드는 작업이 필요
→ 여기서 설계도는 클래스(class)를 뜻함.
- 클래스에 객체를 생성하기위한 멤버변수(필드)와 메소드가 정의되어 있음
- 클래스로 부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 함
- 객체를 만드는 과정을 인스턴스화 라고함
- 하나의 클래스로 부터 여러개의 인스턴스를 만들수 있음(참조하는 객체는 완전히 독립된 서로 다른 객체)
- main()메소드가 없는 클래스는 객체생성 과정을 거쳐 사용해야함
클래스선언(정의)
- 식별자 작성규칙을 따름(첫글자는 대문자로)
- 소스파일이름과 같음
- public 접근 제한자는 파일이름과 동일한 이름의 클래스 선언에만 붙일 수 있다.
객체생성과 클래스 변수
- 클래스로 부터 객체를 생성하려면 new연산자 사용
- new연산자로 생성된 객체는 메모리 힙(heap)영역에 생성
- new 연산자로 객체를 생성하고 리턴된 객체의 번지(주소값)를 변수에 저장
<클래스의 구성멤버>
1. 멤버변수 (멤버변수 글 참조)
- 객체의 데이터가 저장되는 곳
- 객체의 고유 데이터, 부품객체, 상태정보를 저장
- 필드라고도 부름
- 메소드가 실행종료되면 자동소멸
2. 생성자 : 객체생성 시 초기화 역할 담당
3. 메서드 : 객체의 동작에 해당하는 실행블록(메서드 글 참조)
public class ClasssName{
int fieldname; //멤버변수
ClassName(){·······} // 생성자
void mthodeName(){······}// 메소드
//void => 리턴값이 없다. mthodeName() => 매개변수가없다.
}
<클래스 타입(참조형)변수선언기본문법>
new 클래스();
<클래스 인스턴스 생성 및 주소 저장 기본 문법>
클래스 변수; //->변수선언(참조형)
변수 = new 클래스() // 인스턴스 생성(객체생성) // 변수에 대입
<클래스 변수선언 및 인스턴스 생성을 동시에 수행하는 문법>
클래스명 변수명 = new 클래스명();
<생성된 인스턴스 접근방법>
변수명.멤버변수명 또는 변수명.메서드명();
< 클래스 정의 기본 문법>
[접근제한자]class 클래스명{
//멤버변수....
//메서드().....
}
예시1)
public class Ex {
public static void main(String[] args) {
//기본형 변수 사용예시
int a;
a=10;
System.out.println();
//클래스 변수 선언
//Person p;
// 인스턴스 생성 및 주소저장
//p = new Person();
//위의 두문장을 한문장으로 결함
Person p = new Person(); //인스턴스 생성
//인스턴스가 생성되면 클래스내의 멤버변수가 인스턴스내의 메모리에 생성됨(실제데이터저장가능)
//이떄, 인스턴스내의 멤버변수에 접근하려면
//클래스 변수인 참조변수를 통해 이스턴스에 접근해야함
p.name ="홍길동";// 참조변수 p를 따라가서 멤버변수 name에 접근
//=>해당 멤버변수에 문자열 "홍길동"을 저장
//멤버변수 age에 저븐하여 정수 20을 저장
p.age=20;
System.out.println("이름 : " + p.name);
System.out.println("나이 : " + p.age);
p.print();//Person인스턴스의 메서드 print를 호출
System.out.println("====================================");
//두번째 Person인스턴스 생성(변수 p2사용)
//홍길동이 저장된 Person인스턴스(p)와
Person p2 = new Person();//인스턴스 생성
p2.name = "이순신";
p2.age = 40;
System.out.println("이름 : " + p2.name);
System.out.println("나이 : " + p2.age);
p.print();//Person인스턴스의 메서드 print를 호출
}
}//Ex클래스 끝
/*
<출력결과>
이름 : 홍길동
나이 : 20
Person클래스의 print()메서드!
====================================
이름 : 이순신
나이 : 40
Person클래스의 print()메서드!
*/
/* 분석 - 사람(Person)에대한 객체모델링
* 1) 속성 : 이름 나이 등
* 2) 동작 : 말하기, 먹기 등
*
* 설계 - Person클래스 정의
* 1) 속성(멤버변수) : 이름(name, 문자열), 나이(age, 정수)
* 2) 동작(메서드) : 말하기, 먹기 등
*
*/
public class Person {
// Person클래스 내부에는 멤버변수와 메서드를 정의 할 수 있다.
//1. 멤버변수(이름, 나이) 정의
String name;//인스턴스 생성시 매번 새로운 공간이 생겨 이를 인스턴스 멤버변수라고 한다.
int age; //인스턴스 멤버변수
// => 인스턴스 생성시 모든 인스턴스의 초기값이 기본으로 자동 초기화
// => 인스턴스마다 새로운 공가닝 매번 할당되므로 인스턴스 멤버변수라고 한다.
String type = "사람";//멤버변수 선언시 초기값 지정(초기화)가능
//=> 인스턴스 생성시 모든 인스턴스의 초기값이 "사람"으로 지정됨
//메서드 정의
public void print() {
System.out.println("Person클래스의 print()메서드!");
}
}
예시2)
참고! public접근제한자는 파일이름과 동일한 이름의 클래스 선언에만 붙일수있다.
public class Ex2 {
public static void main(String[] args) {
Student s1 = new Student();// 인스턴스생성 //아래에 클래스 생성
//Student 인스턴스 생성시 기본값 확인
System.out.println("학생이름 : " + s1.name);
System.out.println("과정명 : " + s1.className);
System.out.println("학생나이 : " + s1.age);
s1.name = "서지연";
s1.className= "A반";
s1.age = 28;
System.out.println();
System.out.println("학생이름 : " + s1.name);
System.out.println("과정명 : " + s1.className);
System.out.println("학생나이 : " + s1.age);
System.out.println("=============================");
Student s2 = new Student();// 인스턴스 생성
s2.name = "홍길동";
s2.className = "B반";
s2.age = 30;
System.out.println("학생이름 : " + s2.name);
System.out.println("과정명 : " + s2.className);
System.out.println("학생나이 : " + s2.age);
}
}//Ex2클래스 끝
//하나의 java파일 내에 여러개의 클래스를 정의할수 있다.
//=> 단, java파일명과 동일한 클래스에만 public 키워드를 사용
//Student 클래스 정의
class Student{
//인스턴스 멤버변수
String name; //기본값 null로 초기화
String className;//기본값 null로 초기화
int age;//기본값 0으로 초기화
}
/*
<출력결과>
학생이름 : null
과정명 : null
학생나이 : 0
학생이름 : 서지연
과정명 : 빅데이터 활용 자바 파이썬 개발자 양성과정
학생나이 : 28
=============================
학생이름 : 홍길동
과정명 : 빅데이터 활용 자바 파이썬 개발자 양성과정
학생나이 : 30
*/
!!POINT!!
1) 클래스 : 객체를 만들기위한 설계도
2) 객체 : 클래스로부터 생성, 'new 클래스()' 생성 - 제품
3) new연산자 : 객체생성연산자, 생성자를 호출하고 객체생성번지를 리턴
4) 클래스변수(참조변수) : 클래스로 선언한 변수, 클래스의 객체번지(주소)가 저장
5) 인스턴스 : 객체는 클래스의 인스턴스 (객체를 메모리상으로 끌고온것) - 제품
6) 클래스 멤버 : 클래스에 선언되는 멤버는 멤버변수(필드), 생성자, 메소드
7) 메소드 : 객체의 동작부분으로, 실행코드를 가지고 있는 블록
8) 멤버변수(필드) : 객체의 데이터를 저장
9) 생성자 : 객체의 초기화를 담당
참고. 혼자공부하는 자바/아이티윌부산
'IT > JAVA' 카테고리의 다른 글
[JAVA] 접근제한자(Public, Protected, Private, Default) (0) | 2020.08.18 |
---|---|
[JAVA]멤버변수(필드) (0) | 2020.08.12 |
[JAVA] 객체지향프로그래밍(OOP) 1 (0) | 2020.08.12 |
[JAVA]메서드(Method)란? (0) | 2020.08.11 |
[JAVA] 향상된 for문 (0) | 2020.08.07 |