Regular expression 정규식, 정규식, 정규 표현식
Predefined character classes
main() 메서드의 String( ) 매개 변수 사용
객체 지향 프로그래밍
: 부품에 대응하는 오브젝트를 최초로 작성해, 이러한 오브젝트를 하나씩 조립해 완성한 프로그램을 만드는 기법
개체이란?
객체 = 데이터(필드) + 메소드
(속성->필드, 액션->메소드)
객체와 클래스
– 오브젝트를 작성할 때 필요한 설계도에 대응하는 것 클래스(class)
– 클래스에서 생성 된 객체를 해당 클래스의 인스턴스
– 클래스에서 객체를 만드는 과정 -> 인스턴스화
– 같은 클래스에서 여러 인스턴스를 만들 수 있습니다.
클래스 선언
: 클래스 선언은 객체를 생성하기위한 청사진을 만드는 방법
– 클래스 선언은 소스 파일 이름과 마찬가지로 생성됩니다.
//클래스 선언
public class 클래스명 {
}
– public class -> 공용 클래스 선언 (어디에 있든 패키지에 관계없이 사용할 수 있음)
– 클래스명은 최초의 문자를 대문자로 하는 UpperCamelCase로 작성하는 것이 관습
– 특수 문자 안에 $, _를 포함 할 수 있습니다.
– 하나의 소스 파일에 여러 클래스를 선언 할 때 소스 파일 이름과 동일한 클래스 만 public class로 선언 가능
– 특별한 이유가 없으면 소스 파일 당 하나의 클래스 선언
객체 생성 및 참조 변수
ㅁ new 연산자 : 객체 생성 연산자, 클래스에서 객체를 생성할 때 사용
위의 이미지는 클래스 변수가 생성된 객체를 참조하는 모양
ㅁ 클래스의 두 가지 용도
– 라이브러리(library) 클래스 : 실행할 수 없으며 다른 클래스에서 사용되는 클래스
– 실행 클래스 : main() 메서드가 있는 실행 가능 클래스
일반적으로 Java는 하나의 실행 클래스와 여러 라이브러리 클래스로 구성됩니다.
클래스의 구성 멤버
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);
메소드 선언
: 메소드 선언은 오브젝트의 동작을 실행 블록으로 정의하는 것입니다.
ㅁ 리턴 타입
: 메서드가 실행된 후 호출한 위치에 전달하는 결과 값 유형
리턴값이 없는 메소드는 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; //리턴값 지정;
}
메소드 호출
: 메소드 블록 실행
메서드는 객체 내에서도 호출되지만 다른 객체에서도 호출할 수 있으므로 객체 간의 상호 작용 방법을 정의합니다.
개체가 없으면 메서드를 호출할 수 없습니다.
내부에서 호출할 때 메서드 이름으로 호출
로필드와 마찬가지로 외부 객체에서 호출할 때 참조 변수와 점(.) 연산자 를 사용하여 호출
로메소드가 파라미터를 가질 때 파라미터의 종류와 순서, 수에 따라 매개변수를 제공해야 합니다.
참고 메서드에 반환 값이 있는 경우 할당 연산자를 사용하여 변수에 저장할 수 있습니다.
ㄴ 이때 변수형은 메소드의 반환형과 같거나 자동형 변환으로 할 수 있어야 한다.
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+왼쪽 키: 원래 파일로 돌아가기