728x90
반응형
SMALL

객체 지향 프로그래밍

객체란?

물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것.

속성과 동작으로 구성.

 

객체 간의 관계

-집합 관계: 완성품과 부품의 관계

-사용 관계 : 다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계

-상속 관계 : 부모와 자식 관계.

 

객체 지향 프로그래밍의 특징

-캡슐화 : 객체의 데이터, 동작을 하나로 묶고 실제 구현 내용을 외부에 감추는 것. 접근 제한자 사용

-상속 : 부모 객체는 자기가 갖고 있는 필드와 메소드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있도록 한다.

=>코드의 재사용성을 높여줌

=>유지 보수 시간을 최소화 시켜줌

-다형성 : 실행 결과가 다양하게 나오게 해주는 성질. 자동 타입 변환과 재정의 기술 필요.

 

객체와 클래스

-객체를 생성하려면 클래스가 필요.

-클래스로부터 생성된 객체를 해당 클래스의 인스턴스라고 부른다.

-인스턴스화 : 클래스로부터 객체를 만드는 과정.

 

클래스 선언

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

 

객체 생성과 클래스 변수

클래스 변수 = new 클래스();
Student s1 = new Student();
System.out.println("s1변수는 Student 객체 참조.");

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

 

클래스의 구성 멤버

- 필드 : 객체의 데이터가 저장되는 곳

- 생성자 : new 연산자로 객체를 생성할 때 초기화 역할을 담당.

- 메소드 : 객체가 수행할 동작.

public class ClassName{
	//필드 선언
    int fieldName;
    
    //생성자 선언
    ClassName(){...}
    
    //메소드 선언
    int methodName(){...}
}

 

필드 선언과 사용

필드 선언

타입 필드명 [ = 초기값 ];
public class Car{
	//필드 선언
    String model;
    boolean start;
    int speed;
}

 

필드 사용

[외부 객체에서 필드 사용]
void method(){
	//Car 객체 생성
    Car myCar = new Car();
    //필드 사용
    myCar.speed=60;
}

[내부 객체에서 필드 사용]
int speed;
//생성자에서 사용
Car(){
	speed= 60;
}

//메소드에서 사용
void method(...){
	speed=60;
}

 

생성자 선언과 호출

기본 생성자

[public] 클래스(){...}

 

생성자 선언

public class Car{
	//생성자 선언
    Car(String model, String color, int maxSpeed){...}
}

 

필드 초기화

public class Korean{
	//필드 선언
    String nation ="대한민국";
    String name;
    String ssn;
    
    Korean(String name, String ssn){
    	this.name=name;
        this.ssn=ssn;
    }
}

 

생성자 오버로딩

매개값으로 객체의 필드를 다양하게 초기화하려면 생성자 오버로딩 필요.

매개변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.

public class Car{
	Car(){...}
    Car(String model){...}
    Car(String model, String color){...}
    Car(STring model, String color, int maxSpeed){...}
}

 

다른 생성자 호출

생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다.

따라서 공통 코드를 한 생성자에게만 집중작성하고, 나머지 생성자는 this()를 사용한다.

Car(String model){
	this(model, "은색", 250);
}

Car(String model, String color){
	this(model, color, 250);
}

Car(String model, String color, int maxSpeed){
	this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
}

 

메소드 선언과 호출

메소드 선언

리턴 타입 메소드명 (매개변수1, ... ){

         실행 블록...

}

 

리턴 타입

리턴 타입은 메소드가 실행한 후 호출한 곳으로 전달되는 결과값의 타입을 말한다.

리턴값이 없을 때는 void로 작성!

void powerOn() { ... } //리턴값이 없는 메소드 선언
double divide(int x, int y){ ... } //double타입 값을 리턴하는 메소드 선언

 

메소드명

메소드명은 첫 문자를 소문자로 시작하고, 캐멀스타일로 작성한다.

*캐멀스타일 : 단어 연결할 때 두번째 단어의 첫 글자를 대문자로!

void run(){ ... }
void setSpeed(int speed){ ... }
String getName(){ ... }

 

매개변수

메소드를 호출할 때 전달한 매개값을 받기 위해 사용. 생략 가능

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

 

실행블록

publi class calculator {
	//리턴값이 없는 메소드 선언
    void powerOn(){
    	System.out.println("전원을 켭니다.");
    }
}
void method(){
	Calculator c = new Calculator();
    c.powerOn();
}

 

메소드 호출

메소드 블록을 실행하는 것을 말한다. 객체가 존재해야 호출할 수 있다.

타입 변수 = 메소드();
//외부 객체에서 선언
void method(){
	Calculator calc = new Calculator();
    calc.powerOn();
    int r1 = calc.plus(3,5);
    double r2 = calc.divide(15,3);
}
//객체 내부에서 선언
Calculator(){
	powerOff();
}

void powerOn(){ ... }
void powerOff(){ ... }
int plus(int x, int y){ ... }
double divide(int x, int y){ ... }

void method() {
	powerOn();
    int r1 = plus(3,5);
    double r2 = divide(15,3);
}

 

가변길이 매개변수

매개변수의 개수에 맞게 매개값을 제공해야함.

만약 메소드가 가변길이 매개변수를 갖고 있다면 매개변수 개수와 상관없이 매개값 전달 가능.

int sum(int ... values){

}
int result = sum(1,2,3);
int result = sum(1,2,3,4,5);
int[] values = {1,2,3};
int result = sum(values);

int result2 = sum(new int[] {1,2,3);
//매개값들이 자동으로 배열 항목으로 변환되기 때문에 배열을 매개값으로 전달 가능

 

return 문

return은 메소드의 실행을 강제 종료하고 호출한 곳으로 돌아간다는 의미.

메소드 타입이 있을 경우 return 문 뒤에 맞는 리턴값 추가.

return [리턴값];

 

메소드 오버로딩

메소드 이름은 같되 매개변수의 타입, 개수, 순서가 다른 메소드를 여러개 선언하는 것.

void println(){...}
void pintln(double x){...}
void println(int x){...}
void println(String s){...}
void println(int x, double y){...}
728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

[JAVA] #8 인터페이스  (0) 2023.04.14
[JAVA] #7 상속  (0) 2023.04.11
[JAVA] #6 클래스(Class)-2  (0) 2023.04.10
[JAVA] #2 변수와 타입  (0) 2023.04.06
[JAVA] #0 Eclipse 설치 및 환경 구축  (0) 2023.04.06

+ Recent posts