Java

Java(객체, 클래스, Scanner 클래스)

yoooon1212 2024. 4. 15. 11:30

<객체지향>

프로그래밍 패러다임 중 하나로,

실세계의 사물 또는 실제로 존재 가능한 것을 객체로 모델링하여 프로그램을 구성하는 방법

객체의 속성(Properties)
객체의 특성, 상태, 데이터를 의미
ex) '자동차'라는 객체가 있다면, 이 객체의 속성은 색상, 브랜드, 모델, 연식 등이 될 수  있음.


객체의 행동(Methods)
객체가 수행할 수 있는 작업이나 기능을 의미 ex) '자동차' 객체의 경우, 주행하기(drive), 멈추기(stop), 가속하기(accelerate) 등의 행동


객체의 특징
  • 캡슐화(Encapsulation): 객체는 자신의 데이터(속성)와 그 데이터를 조작하는 메서드(알고리즘)를 하나의 단위로 묶어 관리함. 이를 통해 객체의 상세한 구현 내용을 숨기고(정보 은닉), 외부에서는 객체가 제공하는 메서드를 통해서만 상호작용할 수 있게 함.
  • 독립성: 객체는 독립적으로 존재하며, 각 객체는 고유의 속성과 메서드를 가짐. 객체 간에는 메시지를 통해 상호작용함.

 

 

 

<클래스>

객체를 생성하기 위한 템플릿 또는 설계도면(형틀, 청사진)

 

객체의 상태를 나타내는 필드(변수)와 객체의 행동을 정의하는 메서드(함수)로 구성됨. 

즉, 데이터와 그 데이터를 조작하는 코드를 묶어 놓은 컨테이너와 같음.

클래스를 만드는 규칙
  • 클래스는 대문자로 시작하는것이 좋음(권장사항)
  • 파스칼 케이스(PascalCase)(첫글자가 대문자)와 카멜 케이스(camelCase)(중간 글자 대문자 포함) 명명 규칙 사용하기

 

 

<필드 선언>

필드는 객체의 데이터를 저장하는 역할을 함.

반드시 클래스 블록에서 선언되어야 함.

타입(자료/참조) + 필드명(첫문자: 소문자, 캐멀 스타일)

 

예시)

public class Student {
String name;
int grade;
String major; 
double height;
double weight;
}
public class Book {
String title;
String author; 
int publishYear; 
int totalPage;
}

public : 외부에서 클래스를 자유롭게 사용할 수 있다는 접근 지정자

Student, Book : 클래스 이름

{ } 내 : 필드

 

 

<클래스를 인스턴스화 시키는 과정>

 

 

 

인스턴스란?
클래스로부터 만들어지는 각각의 객체
하나의 클래스로 여러 개의 인스턴스를 찍어내지만, 인스턴스마다 속성의 값은 다르다.

 

JVM stack 메모리 공간에서 main 메모리 공간을 할당받음.(코드는 위에서 아래로 내려감.)

main 메모리 내에 n1 = 1, bookBox 1와 bookBox 2 = 주소값이 들어감.

Heap (동적 메모리 공간)에 객체를 생성하라는 명령을 함.(주소값이 담겨짐.)

title, author, publishYear 등의 속성값이 들어감. 

 

* 클래스에 인스턴스화했다.= Heap 메모리 공간에 메모리 bookBox1, 2 를 올린다.

input 이 있으면 output 이 있거나 없을 수 있음.

 

 

예시)

public static void main(String[] args) {
		
		int n1 = 1; 
		double d1 = 5.0; 

		Student student1 = new Student();
		Student student2 = new Student();
		
		student1.name = "홍길동";
		System.out.println(student1.name);
		student2.name = "이순신";
		System.out.println(student2.name);
		
		System.out.println(student1); 
		System.out.println(student2);

	}

Student student1 = new Student(); 의 new 연산자는 객체를 생성한 후 연이어 생성자를 호출해서 객체를 초기화 하는 역할 담당함.(new : 예약어, ( ): 생성자)

Student 는 참조타입으로 변수 student1,2는 실제 값이 들어가는 것이 아니라 주소값이 들어감.(레퍼런스 변수라고 함.)

student1.name = "홍길동"; => '. 연산자'를 통해 Heap 메모리에 생성된 객체에 접근하여 객체의 속성값을 출력함.

 

 

인스턴스 멤버

인스턴스 멤버: 객체에 소속된 멤버(객체를 생성해야만 사용 가능)(필드, 메서드 포함)

정적 멤버: 클래스에 소속된 멤버(객체 없이도 사용 가능)

Car myCar = new Car(); // Car 는 참조 타입, myCar는 참조 변수 
myCar.gas = 10;
myCar.setSpeed(60);
Car yourCar = new Car();
yourCar.gas = 20;
yourCar.setSpeed(80);

 

gas 필드와 setSpeed() 메서드는 인스턴스 멤버여서 외부 클래스에서 사용하기 위해서는 Car 객체를 먼저 생성하고 참조 변수로 접근해서 사용해야 한다. 

gas 필드는 객체마다 따로 존재하며, setSpeed() 메서드는 각 객체마다 존재하지 않고 메서드 여역에 저장되고 공유된다.

 

 

 

 

 

 

 

<Scanner 클래스>

import java.util.Scanner; //Scanner 클래스 포함시킴.
Scanner sc = new Scanner(System.in); // Scanner 클래스의 객체를 생성하고 System.in에 연결함.
int i = sc.nextInt();
String 변수명 = scanner.nextLine(); //String 값 입력 받기

import 는 컴파일러에게 어디서 Scanner 클래스를 찾을 것인지 알려줌.

=> Scanner 클래스는 java.util 패키지에 있음을 알려줌.

Scanner sc 의 sc는 Scanner 타입의 변수임.

키보드에서 받은 바이트드을 정수로 변환하기 위해 nextInt()를 호출함.