Java(객체, 클래스, Scanner 클래스)
<객체지향>
프로그래밍 패러다임 중 하나로,
실세계의 사물 또는 실제로 존재 가능한 것을 객체로 모델링하여 프로그램을 구성하는 방법
객체의 속성(Properties) 객체의 특성, 상태, 데이터를 의미 ex) '자동차'라는 객체가 있다면, 이 객체의 속성은 색상, 브랜드, 모델, 연식 등이 될 수 있음. 객체의 행동(Methods) 객체가 수행할 수 있는 작업이나 기능을 의미 ex) '자동차' 객체의 경우, 주행하기(drive), 멈추기(stop), 가속하기(accelerate) 등의 행동 객체의 특징
|
<클래스>
객체를 생성하기 위한 템플릿 또는 설계도면(형틀, 청사진)
객체의 상태를 나타내는 필드(변수)와 객체의 행동을 정의하는 메서드(함수)로 구성됨.
즉, 데이터와 그 데이터를 조작하는 코드를 묶어 놓은 컨테이너와 같음.
클래스를 만드는 규칙
|
<필드 선언>
필드는 객체의 데이터를 저장하는 역할을 함.
반드시 클래스 블록에서 선언되어야 함.
타입(자료/참조) + 필드명(첫문자: 소문자, 캐멀 스타일)
예시)
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()를 호출함.