Java_10일 자동차 기록

  • by

Regular expression 정규식, 정규식, 정규 표현식

Predefined character classes

main() 메서드의 String( ) 매개 변수 사용


객체 지향 프로그래밍

: 부품에 대응하는 오브젝트를 최초로 작성해, 이러한 오브젝트를 하나씩 조립해 완성한 프로그램을 만드는 기법

개체이란?

객체 = 데이터(필드) + 메소드

(속성->필드, 액션->메소드)

객체와 클래스

– 오브젝트를 작성할 때 필요한 설계도에 대응하는 것 클래스(class)

– 클래스에서 생성 된 객체를 해당 클래스의 인스턴스

– 클래스에서 객체를 만드는 과정 -> 인스턴스화

– 같은 클래스에서 여러 인스턴스를 만들 수 있습니다.

클래스 선언

: 클래스 선언은 객체를 생성하기위한 청사진을 만드는 방법

– 클래스 선언은 소스 파일 이름과 마찬가지로 생성됩니다.

//클래스 선언
public class 클래스명 {
}

– public class -> 공용 클래스 선언 (어디에 있든 패키지에 관계없이 사용할 수 있음)

– 클래스명은 최초의 문자를 대문자로 하는 UpperCamelCase로 작성하는 것이 관습

– 특수 문자 안에 $, _를 포함 할 수 있습니다.

– 하나의 소스 파일에 여러 클래스를 선언 할 때 소스 파일 이름과 동일한 클래스 만 public class로 선언 가능

– 특별한 이유가 없으면 소스 파일 당 하나의 클래스 선언

객체 생성 및 참조 변수

new 연산자 : 객체 생성 연산자, 클래스에서 객체를 생성할 때 사용


출처: https://blog.naver.com/PostList.naver?blogId=qbxlvnf11

위의 이미지는 클래스 변수가 생성된 객체를 참조하는 모양

ㅁ 클래스의 두 가지 용도

라이브러리(library) 클래스 : 실행할 수 없으며 다른 클래스에서 사용되는 클래스

실행 클래스 : main() 메서드가 있는 실행 가능 클래스

일반적으로 Java는 하나의 실행 클래스와 여러 라이브러리 클래스로 구성됩니다.

클래스의 구성 멤버


출처: https://m.blog.naver.com/PostList.naver?blogId=imf4

public class ClassName {
//필드 선언 (필드_객체의 데이터가 저장되는 곳)
int fieldName;

//생성자 선언 (생성자_객체 생성 시 초기화 역할 담당)
ClassName() {...}

//메소드 선언 (메소드_객체의 동작으로 호출 시 실행하는 블록)
int methodName() {...}
}

필드(Field) : 객체 데이터를 저장하는 역할

생성자(Constructor) : new 연산자로 오브젝트를 생성할 때의 오브젝트의 초기화의 역할을 담당하는, 선언형은 메소드와 닮아 있습니다만, 반환형은 없고, 이름은 클래스명과 같습니다

메서드(Method) : 객체가 수행하는 동작, 다른 프로그램에서는 함수, 객체와 객체 간의 상호 작용을 위해 호출

필드 선언 및 사용

ㅁ 필드 선언: 값 정의

	// 값에 대한 정의
	// field
	int age;
	String name;
	int score;
	
	// 기능에 대한 정의
	// method
타입 필드명 ( = 초기값);

※필드와 (로컬) 변수의 차이 ※

– (로컬) 변수는 생성자와 메서드 블록에서 선언/ 생성자와 메서드를 호출할 때만 생성되고 사용됩니다.

– 필드는 클래스 블록에서 선언 / 객체 내에서 존재 / 객체 내외에서 사용할 수 있습니다.

로필드명은 최초의 문자를 소문자로 하는 lowerCamelCase 로 작성하는 것이 관례

초기화되지 않은 필드의 값은 객체 생성시 자동으로 기본에서 초기화

n 기본형은 0, false/참조형은 null

ㅁ 필드 사용 : 필드를 사용하는 것은 필드 값을 변경하는 것입니다

. 연산자: 점(.)은 오브젝트 액세스 연산자입니다.

참조 변수와 점(.) 연산자를 사용하여 필드에 액세스할 수 있습니다(외부 개체에서).

		MyClass01 var1 = new MyClass01();
		
		// . : 필드 접근 연산자
		var1.age = 99;
		var1.name = "son";
		var1.score = 100;
		
		System.out.println(var1.age);
		System.out.println(var1.name);
		System.out.println(var1.score);
		
		MyClass01 var2 = new MyClass01();
		
		var2.age = 88;
		var2.name = "cha";
		var2.score = 200;
		
		System.out.println(var2.age);
		System.out.println(var2.name);
		System.out.println(var2.score);

ㄴ 클래스에서 필드를 선언하더라도 즉시 사용할 수 있는 것은 아닙니다.

로필드는 오브젝트의 데이터이므로 오브젝트가 없으면 필드도 존재하지 않습니다.

클래스로부터 객체가 생성된 후에 필드를 사용할 수 있다

	public class Car {
	//필드 선언
	String company = "현대자동차";
	String model = "그랜저";
	String color = "검정";
	int maxSpeed = 350;
	int speed;
}
		//Car 객체 생성
		Car myCar = new Car2();
		
		//Car 객체의 필드값 읽기
		System.out.println("제작회사: " + myCar.company);
		System.out.println("모델명: " + myCar.model);
		System.out.println("색깔: " + myCar.color);
		System.out.println("최고속도: " + myCar.maxSpeed);
		System.out.println("현재속도: " + myCar.speed);
		
		//Car 객체의 필드값 변경
		myCar.speed = 60;
		System.out.println("수정된 속도: " + myCar.speed);

메소드 선언

: 메소드 선언은 오브젝트의 동작을 실행 블록으로 정의하는 것입니다.


출처: https://velog.io/@00yubin00

ㅁ 리턴 타입

: 메서드가 실행된 후 호출한 위치에 전달하는 결과 값 유형

리턴값이 없는 메소드는 void 로 작성

리턴 타입을 가지는 메소드는 실행 블록내에서 return문으로 리턴값을 반드시 지정

void powerOn() {...}               //리턴값이 없는 메소드 선언
double divide(int x, int y) {...}  //double 타입 값을 리턴하는 메소드 선언
			// field
	
			// method
			// 리턴타입 메소드명 (파라미터 목록) { 실행문들...}
			// 메소드명 작성관습 : loewrCamelCase
			void methodName(int param) {
				//실행문들...	
			}
			void run() {
			}
			void wakeUp() {	
			}
			void standUp() {
			}

ㅁ메소드명

: 메소드 이름은 첫 문자를 소문자로 시작하는 lowerCamelCase로 씁니다.

ㅁ 파라미터(파라미터)

: 메서드를 호출할 때 전달한 매개 변수를 받는 데 사용

전달할 매개 변수가 없으면 매개 변수를 생략할 수 있습니다.

double divide(int x, int y) {...}

ㅁ 실행 블록

: 메소드 호출 시 실행되는 부분

public class Calculator {
	//리턴값이 없는 메소드 선언
	void powerOn() {
		System.out.println("전원을 켭니다.

"); } //리턴값이 없는 메소든 선언 void powerOff() { System.out.println("전원을 끕니다.

"); } //호출 시 두 정수 값을 전달받고, //호출한 곳을 결과값 int를 리턴하는 메소드 선언 int plus(int x, int y) { int result = x + y; return result; //리턴값 지정; } //호출 시 두 정수 값을 전달받고, //호출한 곳으로 결과 값 double을 리턴하는 메소드 선언 double divide(int x, int y) { double result = (double)x / (double)y; return result; //리턴값 지정; }

메소드 호출

: 메소드 블록 실행

메서드는 객체 내에서도 호출되지만 다른 객체에서도 호출할 수 있으므로 객체 간의 상호 작용 방법을 정의합니다.

개체가 없으면 메서드를 호출할 수 없습니다.

내부에서 호출할 때 메서드 이름으로 호출

로필드와 마찬가지로 외부 객체에서 호출할 때 참조 변수와 점(.) 연산자 를 사용하여 호출


출처: https://velog.io/@00yubin00

로메소드가 파라미터를 가질 때 파라미터의 종류와 순서, 수에 따라 매개변수를 제공해야 합니다.

참고 메서드에 반환 값이 있는 경우 할당 연산자를 사용하여 변수에 저장할 수 있습니다.

ㄴ 이때 변수형은 메소드의 반환형과 같거나 자동형 변환으로 할 수 있어야 한다.

method overloading 메서드 오버로드

: 메소드 이름은 동일하지만 매개 변수 유형, 수 및 순서가 다른 여러 메소드를 선언합니다.

* 목적 : 다양한 매개 변수를 처리하기 위해

	// 파라미터 개수, 순서, 타입에 맞게 argument 전달해야 함
	
	// method overloading
	// 메소드 이름이 같아도 파라미터 개수, 순서, 타입이
	// 다르면 다른 메소드
	
	void method1(int i) {
		System.out.println("정수 하나 받는 메소드");
	}
	
	 void method1(long i) {
		 System.out.println("long 하나 받는 메소드");
	 }
	 
	 void method1(int i, int j) {
		 System.out.println("정수 두개 받는 메소드");
	 }
	 
	 void method1(String i, int j) {
		 System.out.println("문자열 하나, 정수 하나 받는 메소드");
	 }
	 
	 void method1(int i, String j) {
		 System.out.println("정수 하나, 메소드 하나 받는 메소드");
	 }

로 아래의 코드예는 메소드를 오버로드해 파라미터가 1개면 정사각형의 넓이를, 2개이면 직사각형의 넓이를 계산

public class Calculator {
	//정사각형의 넓이
	double areaRectangle(double width) {
		return width * width;
	}
	
	//직사각형의 넓이
	double areaRectangle(double width, double height) {
		return width * height;
	}
		public static void main(String() args) {
		//객체 생성
		Calculator myCalcu = new Calculator();
		
		//정사각형 넓이 구하기
		double result1 = myCalcu.areaRectangle(10);
		
		//직사각형의 넓이 구하기
		double result2 = myCalcu.areaRectangle(10,20);
		
		System.out.println("정사각형 넓이 = " + result1);
		System.out.println("직사각형 넓이 = " + result2);
	}


(오늘 바로 가기)

클래스 이름 위에 커서를 놓고 F3 : 클래스 파일로 이동

alt+왼쪽 키: 원래 파일로 돌아가기