6. 클래스

6.1 객체지향프로그래밍

제품 부품만들고 조립함.
소프트웨어 웹 애플리케이ㅣ션 개발 시 세부 객체들을 설계하고 만들고 조립하고 만드는것
이것이 객체 지향프로그래밍 엔진등 하나식 만들어서 조립

객체란?
데이터와 메소드로 구성된 덩어리
물리적으로 존재하거나 개념적인 것 중에서 다른것과 식별가능한 것
예를들어 자동차 자전거 책 사람 등 개념적인 학과 강의 주문등도 모두 객체
객체 속성(데이터)과 동작(메소드)
사람: 속성 이름 나이 동작 웃다 먹다
자동차 : 속성 색깔 속도 동작 달린다 멈춘다 -> 자바 소프트웨어로 객체 모델링 / 속성을 필드로 동작을 메소드로
현실세계의 객체를 소프트웨어 객체로 설계하는것을 객체 모델링이라고 한다.
현실속엔 객체가 너무 많아서 대표 속성과 동작을 추려내어 소프트웨어 객체의 필드와 메소드로 정의하는 것이다.

객체의 상호작용
사람 -> 더하기 기능이용(메소드호출) 계산기
<- 결과리턴 객체끼리 상호작용을 한다.
프로그램에서도 객체와 서로 상호작용하면서 동작한다. 객체들 사이의 상호작용수단은 메소드임. 객체가 다른 객체의 기능을 이용할때 메소드를 호출한다.
메소드(매개값1, 매개값2 ...)
메소드 호출을 통해 객체들은 데이터를 서로 주고받는다. 메소드 이름과 함께 전달하고자하는 데이터를 괄호 안에 기술
이러한 데이터를 매개값이라고 한다. 매가값은 메소드가 실행할때 필요한 값 리턴값은 메소드의 실행의 결과 호출한것으로 돌려주는 값.
int result = add(10, 20); 매개값 10, 20 -> 산출된(리턴한) 값을 int 변수에 저장

객체간의 관계
사용관계 사용하는 관계 다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계
상속관계 부모와 자식관계 자동차가 기계의 특징(필드메소드)를 물려받는다면 기계(부모)와 자동차(자식)은 상속관계
집합관계 말그대로 집합 완성품과 부품의관ㄱ{ 자동차는 엔진 타이어 핸들 등으로 구성되므로 자동차와 부품들은 집합의관계임.

객체지향프로그램밍의 특징
부품을 만들고 부품들을 조립해서 부품들로 완성품을 만드는 것

1.캡슐화
보호한다. 객체를 만들면 안에 데이터 메소드 잇음. 데이터와 메소드 모든 다른 객체에서 이용할 수 있는 것은아님.
일부는 사용가능 일부는 전자계산기 안에서만 사용가능
객체를 설계할때 어떤부분은 쓰도록 보여주고 어떤부분은 내부에서만 사용하도록 설계
접근제한자를 사용하여 만든다.

2.상속
부모라는 객체 사이 객체와 자식역할의 하위객체가 있다.
부모객체는 자기가 가지고 있는 필드와 메소드를 자식객체에게 무려주어 자식객체가 사용할수있도록한다.
코드의 재사용성을 높여줌. 잘 개발된 부모 객체의 필드와 메소드를 자식이 그대로 사용할 수 있어 자식 객체에서 중복코딩 안함.
유지보수 시간을 최소화 부모 객체필드에서 수정되면 모든 자식 객체들은 수정된 필드와 메소드들 사용함.
자식을 여러개 만들수 있음. 자식또한 자식만 가진 필드를 가질수 잇음.

3.다형성
사용방법은 동일한데 실행결과가 다양하게 나오는 성질
자동차에서 부품을 바꾼다 ex)타이어 사용방법은 동일함. 그러나 타이어 장착에따라 성능이 다름.
'자동타입변환'과 '재정의' 기술이 필요하다. 이는 상속 인터페이스 구현을 통해 얻어진다.

6.2 객체와 클래스

클래스 : 객체를 생성하기 위한 설계도, 청사진
클래스를 가지고 -> 객체를 만드는것 '인스턴스화' 한다
만들어진객체를 인스턴스라고도 한다.
하나의 설계도로 여러객체를 만들 수 있음. 설계도하나에 여러 객체
설계도 클래스를 만드는게 중요하다.
이전까지는 main()메소드만 작성해서 클래스를 이용했다. 실행만하게
앞으로는 객체안에 뭐뭐뭐가들어가야하는지 필드가 뭔지 메소드가 뭔지가 클래스이다.

6.3 클래스 선언

6.3.1 클래스선언

객체를 생성하기 위한 설계도를 작성하는 작업
객체를 생성 객체가 가져야하할 데이터(필드)가 무엇이고 객체의 동작(메소드)는 무엇인지를 정의하는 내요잉 포함되어야한다.
클래스선언 은 public class 클래스명{}
public class는 공개 클래스를 선언한다는 뜻
클래스 명은 첫문자를 대문자. 캐멀스타일 숫자가능 첫문자는 숫자x 특수문자중 $와 _를 포함할수 있다.
예) SportCar

6.3.2 패키지 선언

클래스 선언 대부분 하나의 소스파일에 하나의 클래스선언한다.
클래스 정의하기 위해만든거라 main함수 안넣음.
public class SportCar {}
class Tire{ }
따로따로 저장됨 소스파일이 저장됨 .class 두개 소스파일안에 여러개가 선언되면 바이트파일이 여러개임
소스파일 안에 여러개 만들면 하나만 공개할수잇음.
public class SportCar {}
public class Tire{ } //오류남.
하나의 소스파일에 여러개 넣는이유 = 편리성, 빠르게 테스트
일반적으론 1소스파일 1클래스 이나 매우 밀접한 관련이 있어서 연관성을 위해 하나에 작성하는거임
그래서 하나는 숨겨놓고 공개클래스안에서 사용하기 위한 클래스임.
공개클래스란? 캡슐화와 관련 외부에서 마음껏 사용할 수 있는 클래스 public이 접근제한자로 다른 패키지에서 사용가능함.

6.4 객체생성과 클래스 변수

객체는 메모리에 생성됨. 메모리에 생성되는걸 사용해야하는데 어디 메모리에 객체가 있느냐를 알아야함.
번지를 가지는 것임. 번지? 참조타입 힙영역에 객체가 생김
메모리번지를 변수에 저장해야 함. 변수로 객체를 사용할 수 잇다.
클래스 변수 = new 클래스이름(); 변수에는 클래스로 만든 객체의 번지가 저장되어잇음 이 변수는 참조파일이됨.
new는 객체를 만드는 연산자임. 어떤 이름에서 클래스를 만들것이냐?

main메소드가 잇으면 객체를 만드는게아니라 실행용임. 없으면 클래스를 만들기 위한것임.

//라이브러리(library) 클래스
public class Student {
}

//실행클래스
Student s1 = new Student(); //Student객체를 만들어서 s1에 넣음.
System.out.println("s1 변수가 Student 객체를 참조합니다.");

Student s2 = new Student();
System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");

클래스의 두가지용도
1.라이브러리(library) 클래스: 실행할수 없으며 다른 클래스에서 이용하는 클래스
2.실행클래스 : main()메소드를 가지고 있는 실행가능한 클래스
앞의 예제에서 Student는 라이브러리 클래스이고 StudentExample은 실행클래스라고 볼 수 있다.
일반적으로 자바 프로그램은 실행 클래스와 여러개의 라이브러리 클래스로 구성된다. 실행클래스는 실행하면서 라이브러리 클래스를 내부에서 이용한다.
앞으로 작성할때 위는 라이브러리 클래스 아래는 실행클래스로 나누고자 한다.

6.5클래스의 구성멤버

클래스 선언 안에는 무엇이 들어가는가?

1.필드 : 데이터를 저장하는 역할

2.생성자 : 생성하는 자 객체를 생성하는 것 객체의 초기화 역할을 담당

3.메소드 : 객체가 수행할 동작 다른 프로그램언어에서는 함수 라고도 함. 객체 내부의 함수는 메소드라고 부른다. 메소드는 객체와 객체간의 상호작용을 위해 호출된다.

'기초단계 > JAVA' 카테고리의 다른 글

2022.11.17-3 JAVA 클래스 3  (0) 2022.11.17
2022.11.17-2 JAVA 클래스 2  (0) 2022.11.17
2022.11.16-3 JAVA 참조타입 3  (0) 2022.11.16
2022.11.16-2 JAVA 참조타입 2  (0) 2022.11.16
2022.11.16-1 JAVA 참조타입  (0) 2022.11.16

+ Recent posts