9일차 클래스!

쿠우·2022년 4월 5일
0

(1)붕어빵 틀(클래스)= > 붕어빵 (인스턴스 ==객체)
(2) 클래스 - > 객체의 설계도(건축도면or 조선도면)
(3)클래스에서 객체(붕어빵)을 찍어내는 과정 - >
인스턴스화 (Instantiation) =>
"인스턴스"(Instance)(과정중심)": "객체(Object)(결과중심)"
(클래스 이름은 첫글자 대문자)
class 동물 {
소리발산(){}
}
class 고양이 extends 동물 {}

동물 parent = new 고양이(); ----다형성 -1

(4)다형성: 상속을 전제로 한다.
같은 행위를 요구하면 다 다른 형태로 성질이 나온다.

                      <동물>:소리발산             
           <강아지>     <고양이>     <사람>    
            (멍멍)            (야옹)            (엉엉)
 이것이  상속이다. 

(5) 무결성: 결함이 없는 성질 = 일관성 + 정확성
(6)다형성의 전제조건: 부모/자식 상속관계가 형성
(7) new 연사자 = "객체 생성 연산자 "
1) JVM RDA HEAP에 새로운 객체를 생성
2) 괄호 안 지정된 "생성자" 호출 => 새로운 객체의 필드를 초기화
3) 초기화까지 끝낸, 사용가능한 객체의 주소(번지수)를 반환
*객체의 주소(번지소) = 객체의 reference(참조)

(8) 메소드/ 생성자 호출 (!call => Invoke / Invocation)


객체 지향 프로그래밍

(1)OOP : Object - Oriented Programming
(2)부품 객체를 먼저 만들고 이것들을 하나씩 조립해 완성된 프로그램을 만드는 기법

객체(Object)란?

(1)물리적으로 존재하는 것(자동차, 책, 사람)
(2)추상적인 것(회사,날짜) 중에서 자신의 속성과 동작을 가지는 모든 것
(3)객체는 필드(속성)과 메소드(동작)로 구성된 자바 객체로 모델링 가능
(어떤 속성과 기능을 부여할지 모델링이 정말 중요)

객체의 상호작용

(1)객체들은 서로간에 기능을 이용하고 데이터를 주고 받음

객체간의 관계

(1)객체 지향 프로그램에서는 객체는 다른 객체와 관계를 맺음
(2)관계의 종류
1)집합관계 : 완성품과 부품의 관계 (자동차와 엔진,미션,브레이크)
2)사용관계 : 객체가 다른객체를 사용하는 관계 (사람과 자동차)
3)상속관계: 종류객체와 구체적인 사물 객체관계(기계와 자동차 )

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

(1)캡슐화 (은닉화)(객체의 무결성을 지키기위해)

 1)객체의 필드, 메소드를 하나로 묶고, 실제 구현 내용을 감추는 것
 2)외부 객체는 객체 내부 구조를 알지 못하며 객체가 노출해 제공하는 필드와 메소드만 이용 가능 
 3)필드와 메소드를 캡슐화하여 보호하는 이유는 외부의  잘못된 사용으로 인해 객체가 손상되지 않도록
 4)자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지 결정하기 위해 접근 제어자를 사용 

(2)상속(확장 시키기 위해 상속을 하는 것이다)

  1)부모 객체의 필드와 메소를 자손 객체에게 물려주는  행위
  2)자손 객체는 부모객체를 확장해서 추가적인 필드와 메소드를 가질 수 있음
  3) 상속 대상: 필드와 메소드
  4) 상속의 효과 
              가) 상위 객체를 재사용해서 하위 객체를 빨리 개발 가능 
              나) 반복된 코드의  중복을 줄임 
              다) 유지보수의 편리성을 제공 
              라) 객체의 다형성 구현

(3) 다형성

  1)같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질 (-1)
            가)부모 타입에는 모든 자식 객체가 대입 
            나)인터페이스 타입에는 모든 구현 객체가 대입
  2) 효과 
           가)객체를 부품화시키는 것 가능 
           나) 유지보수 용이
package objectex;


// 실행 클래스: 클래스가 실행가능한  main() 메소드를 가진 클래스 
// 라이브러리 클래스 : 실행 불가능한 클래스
public class StudentExample {

	
	
	public static void main(String[] args) {//메소드 
		Student s1 = new Student();//(힙에 저장되는 객체)
		System.out.println("s1 변수가 Student 객체를 참조합니다."); 
		System.out.println(s1); // s1의 객체 주소 --> objectex.Student@372f7a8d
		
		Student s2= new Student();//(힙영역에 저장되는 객체)
		System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다."); 
		System.out.println(s2); // s2의 객체 주소  --> objectex.Student@2f92e0f4
        
		
		int[] arr = {1,2,3}; 
		System.out.println(arr);
		// [I@28a418fc  --> 배열은 언어차원에서 생성
		
		
		//  객체의 주소 표현--> 경로(FQCN) @ 논리적주소 
		
	}// 실행진입점(Entry point)

}// end class



//완전한 클래스의 이름  objectEx.Student  --> FQCN :Fully Qualified Class Name
 class Student{ //<<class의 simple name
	;;
} // 보통 이렇게 선언 안함  왜? -유지보수 때문에 (모래사장에서 바늘찾기)
//현업에서는 반드시 소스파일 하나당  클래스 하나 선언





소스파일의 확장자는 .java 이다.
하나의 소스파일에는 public이 단 한개만 있음.
소스파일의 이름은 public인 클래스의 이름과 같아야함.


객체와 클래스

객체(Object)와 클래스(Class)

(1)현실세계 : 설계도 -> 객체
(2)자바: 클래스-> 객체
(3)클래스에는 객체를 생성하기 위한 필드와 메소드가 정의
(4)클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)
(5)하나의 클래스로부터 여러 개의 인스턴스를 만들 수 있음

클래스 선언

클래스 이름 -> Camel 규칙

(1)자바 식별자 작성 규칙에 따라야한다.
1)첫 문자가 문자나 '', '$'의 특수문자로 시작되어야 한다. 숫자로 시작할 수 없다.
2)첫 문자가 아니라면, 문자나 '
', '$'의 특수문자 그리고 숫자로 구성될 수 있다.
3)자바의 예약어는 식별자로 사용할 수 없다.
4)자바의 식별자는 대소문자를 구분한다.
5)식별자 길이는 제한이 없고 공백은 포함할 수 없다.
(2)한글 이름도 가능하나. 영어이름으로 작성
(3)알파벳 대소문자는 서로 다른 문자로 인식

클래스 선언과 컴파일

(1)소스 파일 생성:클래스이름.java(대소문자 주의)
(2)소스 작성
(3)소스 파일당 하나의 클래스를 선언하는 것이 관례
1)두 개 이상의 클래스도 선언 가능
2)소스 파일 이름과 동일한 클래스만 public으로 선언 가능
3)선언한 개수만큼 바이트 코드 파일이 생성
(개수만큼 .class 파일이 생성 .java는 소스만 하나 생김 )


IDE를 사용하지 않은 컴파일 과정
파워셀에서 (cd temp >dir >scoop search touch>scoop install coreutils)사전 준비 >touch TTT.java >notepad .\TTT.java (코드 입력) >javac .\TTT.java(컴파일 과정) >java TTT (실행 출력) --->


객체 생성과 참조타입 변수

new 연산자 -내용 맨위에 정리

참조타입 변수

(1)new 연산자에 의해 리턴 된 객체의 주소(레퍼런스) 저장 (참조 타입 변수)
(2)힙 영역의 객체를 사용하기 위해 사용

클래스의 용도

(1)라이브러리(API: Application Program Interface) 용
1) 자체적으로 실행되지 않음
2)다른 클래스에서 이용할 목적으로 만든 클래스

(2)실행용
-main() 메소드를 가지고 있는 클래스로 실행할 목적으로 만든 클래스

클래스의 구성 멤버

(1)필드(Field) : 객체의 데이터가 저장되는 곳

(2)생성자(Constructor) : 객체 생성시 초기화 역할 담당

(3)메소드(Method):객체의 동장에 해당하는 실행 블록

필드(field)

필드의 내용(필드의 분류에 따라 정리)
-car 라는 클래스를 선언 했을 때 필드에 올 수 있는 변수
(1)객체의 고유 데이터(회사명, 모델, 색깔, 최고속도)
(2)객체가 가져야 할 부품 객체(현재속도 , 엔진회전수)
(3)객체의 현재 상태 데이터(차체, 엔진, 타이어)


드디어 객체에 꽃에 왔다. 이론이 상당히 많다.

오늘 뭔가 붕뜬 느낌이지만 나는 또 극복한다.

profile
일단 흐자

1개의 댓글

comment-user-thumbnail
2022년 4월 5일

아니 분명 어제 썼는데 왜 9일차가 없나 했다.. 임시글에 들어가 있어서 다행이다..

답글 달기