[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