JAVA/이론

[Java] 7. 클래스와 객체 Part.1

katia 2023. 3. 15. 12:42

1. 객체지향 프로그램

(1) 객체지향 프로그램(OOP : Object-Oriented-Programming)

  • 모든 데이터를 오브젝트로 취급하여 프로그래밍 하는 방법으로, 처리 요구를 받은 객체가 자기 자신의 안에 있는 내용을 가지고 처리하는 방식
  • C, Pascal, Basic 등과 같은 절차형 언어(POP : procedure-oriented-programming)가 크고 복잡한 프로그램을 구축하기 어렵다는 문제점을 해결하기 위해 탄생

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

  자료추상화 상속 캡슐화 다형성
설명 불필요한 정보는 숨기고 중요한 정보만을 표현하는 것 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 것 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는것 어떤 한요소에 여러 개념을 넣어 놓는 것
특징 객체의 속성들 중에서 가장 필요한 정보들만 간추려 구성하여 복잡한 문제를 다룰때 사용함 상위 클래스의 모든 속성과 연산을 물려받아 자신의 속성으로 사용이 가능함 객체가 갖고 있는 속성과 데이터를 숨기며, 연산만을 이용해 접근을 허용함 한 가지 형태로 여러가지 기능을 수행할 수 있게 하여 함수와 변수를 상황에 따라 사용할 수 있게 함
장점 유사모델을 만들어 테스트하기 좋고 시스템의 구조 및 구성을 알아보기 좋음 상위와 하위 클래스의 공유로 인해 코드 및 프로그램 재사용율이 증가 각 객체의 데이터가 외부에 은폐 되어있어 오류 발생이 적음.(정보은닉) 같은 이름의 함수를 여러개 정의하고 매개 변수나 타입만을 다르게 호출하는 것이 가능함

2. 클래스와 객체

(1) 객체(object) = 인스턴스(instance)

  • 서로 다른 많은 데이터를 하나로 묶어서 표현한 것
  • 객체 : 실제로 존재하는 것, 사물 또는 개념
  • 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

(2) 클래스(class)

  • 객체를 만드는 도구
  • 객체를 정의해 놓은 것

(3) 클래스를 사용하는 이유

  • 코드의 재사용성 : 새로운 코드를 작성할 때 기존의 코드를 이용
    • 코드의 가독성/확장성이 높아짐
    • 변수나 데이터의 관리나 접근성이 높아짐
  • 신뢰성 높은 프로그래밍 : 제어자와 메소드를 사용해서 데이터를 보호
    • 코드의 중복을 제거하여 오동작을 방지

(4) 클래스의 정의와 객체 생성

  • 클래스 정의 : 클래스를 작성하는 것
  • class 키워드로 클래스를 정의
  • 클래스 이름은 Upper Camel Case 규칙을 따름
class 클래스명{
    본문
}
  • 예시
class Car{    // 클래스 정의
    // 클래스 안에서 변수를 생성
    boolean powerOn;
    String colorString;
    int wheel;
    int speed;
    boolean wiperOn;
}
  • (참고) 네이밍 규칙
종류 예시  특징
Snake Case my_best_friend 언더바(_)로 연결
Lower Camel Case myBestFriend 첫글자는 소문자
Upper Camel Case MyBestFriend 첫글자도 대문자

(5) 클래스의 정의와 객체 생성

  • 객체생성
클래스명 객체 = new 클래스명();

클래스명 객체1 = new 클래스명();
클래스명 객체2 = new 클래스명();
  • 객체 호출
객체명.변수명
객체명.메소드명()
  • 예시
class Car{
    boolean powerOn;
    String color;
    int wheel;
    int speed;
    boolean wiperOn;
}

public class Test {
    public static void main(String[] args){
        // Car클래스의 객체 생성
        Car my_Car1 = new Car();
        Car my_Car2 = new Car();
        // my_Car1 객체의 변수 출력
        System.out.println(my_Car1.color);

        // my_Car1 객체의 변수에 값을 저장
        my_Car1.color = "red";
        my_Car2.color = "blue";
        System.out.println(my_Car1.color);
    }
}

3. 메소드

(1) 메소드

  • 특정 객체/데이터 자료형이 가지고 있는 함수
  • 데이터와 멤버 변수에 대한 접근 권한을 가짐
  • 특정한 직업이나 논리를 구성하는 코드를 괄호로 묶어 놓은것
  • 입력 값을 받아서 내부에서 처리하여 결과를 출력/반환

(2) 메소드 호출방식

  • 특정 객체를 통해서만 호출가능
  • 객체 + '.'(마침표)를 통해 호출가능
  • 예시
ArrayList <Integer> my_list = new ArrayList<>();
my_list.add(3);
my_list.clear();

4. 사용자 메소드

(1) 사용자 메소드(사용자 함수)

  • 사용자 직접 만든 함수
  • 내장함수 외의 기능 혹은 자신이 원하는 기능을 작성
  • 구성요소
    • 인수 : 사용자 함수에 전달할 입력(input) argument라고도 함
    • 매개변수 : 인수를 받아서 저장하는 변수 parameter라고도 함
    • 반환값 : 사용자 함수의 출력(output) return이라고도 함

(2) 사용자 메소드의 정의

  • return문은 반환 값이 없을 경우에는 작성하지 않음
  • 메소드의 반환타입이 void일 경우를 제외하고는 반드시 메소드 내부에 return문이 있어야 함
  • 메소드 이름은 사용자가 지정
반환타입 메소드명(자료형 매개변수, 자료형 매개변수, ....){
    본문
    retuen 반환값;
}

(3) 메소드 호출

  • 정의된 메소드를 사용하는 것(정의 후 사용)
참조변수.메소드명(인수);
  • 예시
// 인수가 있고 반환값이 없는 경우
class Houes{
    void welcome{
        System.out.println("Hello Java!");
    }
}

public class Test{
    public static void main(String[] args){
        House my_house = new House();
        my_house.welcome();
    }
}

(4) 인수와 매개변수

  • 함수로 전달되는 인수를 저장하는 변수를 매개변수라고 함
  • 예시
class Preson{
    // 메소드 정의 
    void introduce(String name, int age){
        System.out.println("내 이름은 " + name);
        System.out.println("나이는 " + age);
    }
}

public class Test{
    public static void main(String[] args){
        // 객체 생성
        Person new_person = new Person();
        // 인수를 매개 변수로 전달
        // introduce 함수 실행
        new_person.introduce("james", 25);
    }
}

(5) 반환값

  • 메소드의 결과 값을 돌려주는 것을 반환이라고 함
  • return을 만나면 즉시 함수를 빠져나옴
class Person{
    String address(){
        String str = "우편번호 12345\n";
        str += "대구시 중구 반월당";
        return str;
    }
}

public class Test{
    public static void main(String[] args){
        Person new_person = new Person();
        // address 함수에 반환값을 str이 반환
        System.out.println(new_person.address());
    }
}

(6) 함수의 종료를 위한 return

  • 값을 반환하지않고 함수가 종료
  • 함수의 특정부분에서 함수를 빠져나오고 싶을 때 사용
  • 예시
class Energy{
    void charge(int energy){
        if(energy < 0){
            System.out.println("0 보다 작은 에너지는 충전 불가능");
            return;
        }
        System.out.println("에너지가 충전됨");
    }
}

public class Test{
    public static void main(String[] args){
        Energy charger = new Energy();
        charger.charge(1);
        charger.charge(-1);
    }
}

5. 클래스의 구성

(1) 인스턴스 변수와 인스턴스 메소드

  • 인스턴스 변수
    • 클래스를 기반으로 만들어지는 모든 인스턴스들이 각각 따로 저장하는 변수
    • 객체마다 가지는 고유한 변수
    • 인스턴스를 생성할 때 만들어짐
    • 인스턴스마다 다른 값을 가져야 할 경우 인스턴스 변수로 선언
  • 인스턴스 메소드
    • 객체를 생성해야 호출이 가능한 메소드
    • 객체가 생성되어야 메모리에 올라감
    • 메소드 앞에 static이 붙어있지 않음
  • 예시
class Car {
    int speed = 0;

    void speed_up(){
        speed++;
    }
}

public class Test{
    public static void main(String[] args){
        Car car1 = new Car();
        Car car2 = new Car();

        car1.speed_up();
        car2.speed_up();
    }
}

(2) 클래스 변수와 클래스 메소드

  • 클래스 변수
    • 모든 인스턴스가 동일한 값을 사용할 때 정의함
    • 모든 인스턴스들이 공유하도록 처리
    • 메모리 공간을 절약할 수 있음
    • 클래스가 처음 메모리에 로딩될 때 생성
    • 변수 선언시 static 키워드를 사용
  • 클래스 메소드
    • 객체를 생성하지 않아도 호출이 가능
    • 메소드 선언시 static 키워드를 사용
  • 예시
class Car{
    // 클래스 변수 
    static int speed = 0;
    // 클래스 메소드
    static void speed_up(){
        speed++;
        System.out.println(speed);
    }
}

public class Test{
    public static void main(String[] args){
        // Car 객체 생성
        Car car1 = new Car();
        Car car2 = new Car();
        // Car 객체에서 speed_up 호출
        car1.speed_up();
        car2.speed_up();

        // 클래스에서 바로 변수명과 메소드명으로 호출
        Car.speed++;
        Car.speed_up();
    }
}

'JAVA > 이론' 카테고리의 다른 글

[Java] 9. 클래스와 객체 Part.3  (0) 2023.03.20
[Java] 8. 클래스와 객체 Part.2  (0) 2023.03.15
[Java] 6. 배열  (0) 2023.03.14
[Java] 5. 반복문  (0) 2023.03.14
[Java] 4. 조건문  (0) 2023.03.14