출처) 코뮤니티 모각코 "JAVA를 자바" 과정

 

1. 객체지향 프로그래밍 (OOP) 구성요소

- 클래스, 객체, 메소드

 

1) 클래스

객체의 설계도 (틀) 

클래스를 이용해 비슷한 구성의 객체 찍어냄

 

    - 필드 : 클래스에 포함된 변수

    - 메소드 : 클래스 안에 있는 함수

    - 생성자 : 인스턴스가 처음 만들어질 때 실행될 초기화 메소드

 

* 클래스를 이용해 객체를 만드는 과정을 클래스의 인스턴스화라고 한다. 

   즉, A라는 클래스에서 만들어진 객체 = A클래스의 인스턴스

   객체 == 인스턴스

 

2) 메소드

클래스에 선언된 함수

 

public 리턴 자료형 메소드명 (입력1, 입력2 ...) {

    ...

    return 리턴값;

}

 

* public -> 메소드가 선언된 클래스 외부에서도 호출될 수 있는 메소드

 

3) 필드

클래스 안에서 선언된 변수

인스턴스로 변수에 데이터를 저장하고 저장된 데이터를 불러올 수 있음

 

2. 생성자

 

클래스가 인스턴스화 될 때 (객체가 만들어질 때) 반드시 호출되는 클래스의 구성요소

 

클래스와 동일한 이름으로 선언함

 

class Calculator {
    Calculator() {
        System.out.println("생성자 실행");
    }
}

public class Helloworld {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        System.out.println("calculator 생성 완료");
    }
}

 

이 예시는 Calculator 클래스에서 생성자가 호출될 때 "생성자 실행" 문구를 출력하도록 만들었다.

 

실행해보면 생성자 실행이 먼저 출력되고, calculator 생성 완료가 출력된다.

 

생성자는 보통 필드의 값을 초기화하기 위해 사용된다.

 

Calculator 클래스에 x, y라는 변수를 생성했다면 초기값을 설정해주어야 한다.

이렇게 초기값을 설정해 주는 것을 보통 생성자를 통해 한다.

 

class Calculator {
    int x;
    int y;
    Calculator(int a, int b) {
        this.x = a; // x에 a 대입
        this.y = b;
    }
}

 

이 예시의 경우 x, y 변수를 선언하고 생성자에서 int 자료형 데이터 2개를 받아 각각 x와 y에 저장한다.

메소드에서 입력 변수를 받는 방식과 비슷하다.

 

class Calculator {
    int x;
    int y;
    Calculator (int x, int y) {
        this.x = x;
        this.y = y;
    }
}

public class HelloWorld {
    public static void main(String[] args) {
        Calculator calculator = new Calculator(3, 5);
        System.out.println(calculator.x);
        System.out.println(calculator.y);
    }
}

 

Calculator 클래스에서 Calculator 생성자를 만들고, calculator 객체를 만들면서 생성자를 이용해 x = 3, y = 5로 초기화 한 것이다.

이를 실행하면 

3

5

이렇게 출력된다.

 

3. this 키워드

 

this는 인스턴스 (객체)를 가리키는 의미이다.

 

Calculato(int x, int y) {

    this.x = x;

    this.y = y;

 

위의 예제에서 this.x 는 인스턴스 내 필드를 가리키고, x는 입력받은 변수를 가리킨다.

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

[JAVA] Day1. 자바 기초  (0) 2022.12.27
[JAVA] 예외처리  (0) 2021.07.22
[JAVA] 배열  (0) 2021.07.20
[JAVA] 스캐너로 입력받기  (0) 2021.07.15
[JAVA] 객체, 생성자, 계산기 예제  (0) 2021.01.11

1. 객체 지향 프로그래밍

객체 지향 프로그래밍이란 객체를 기반으로 하는 프로그래밍이다. 

객체는 사람, 자동차, 건물, 주문, 생산, 관리 등 눈에 보이거나 어떠한 행동을 나타내는 단어를 예로 들 수 있다.

 

반대의 개념은 절차 프로그래밍이 있는데,

이것은 순서대로 일어나는 일을 시간 순으로 프로그래밍하는 것으로, C언어가 대표적이다.

 

2. 클래스

클래스객체에 대한 속성과 기능을 코드로 구현한 것으로, 사용자 정의 자료형이라고 말할 수 있다.

클래스는 데이터와 함수로 정의된다.

 

예를 들어 "학생"이라는 클래스가 있다면,

데이터학번, 이름, 학년, 주소 등이 있고,

함수로는 수강신청, 수업 듣기, 시험 보기 등이 있을 것이다.

 

속성객체의 특성을 정의하는 것으로, 변수 또는 데이터, 멤버 변수라고도 부른다.    (명사)

위의 예에서 학번, 이름, 학년, 주소 등이 해당된다.

 

함수메서드라고도 불리며, 객체가 하는 기능들을 구현하는 것이다.  (동사)

 

3. 클래스 정의하기

(접근 제어자) class 클래스이름 {

    멤버 변수;

    메서드;

}

 

/* 클래스 이름은 대문자로 시작하며, 하나의 자바 파일에 하나의 클래스를 두는 것이 기본이다.

여러 개의 클래스가 같이 있는 경우, public 클래스는 단 하나이며, public 클래스와 자바 파일의 이름은 동일해야 한다.

자바의 모든 코드는 class 내부에 위치한다. */

 

<학생 클래스 만들기>

package classpart;

public class Student {
    int studentId;
    String studentName;
    int grade;
    String address;
    
    public void showStudentInfo() {
        Sysstem.out.println(studentName + ", " + address);
    }
}

studentId부터 address까지가 멤버 변수이고, 

public void showStudentInfo()가 학생 정보를 보여주는 기능을 하는 메서드(함수)이다.

 

4. 패키지

패키지란 클래스 파일의 묶음이다. 패키지를 만들면 프로젝트 하위에 물리적으로 디렉토리가 생성된다.

패키지는 계층 구조로 구성되며, ( . ) 온점으로 계층을 구분한다.

패키지명은 소문자로 적는다.

 

package 패키지명;

 

5. 메서드

메서드는 함수의 일종으로, 객체의 기능을 제공하기 위해 클래스 내부에 구현되는 함수이다.

함수란 하나의 기능을 수행하는 일련의 코드로, 중복되는 기능은 함수로 구현하여 함수를 호출하여 사용한다.

 

//함수 선언
int add (int num1, int num2) {
    return num1 + num2;
}

//함수 사용
public void static main(String[] args) {
    int sum = add(10, 20);
    System.out.println("10 + 20 = " + sum);
}

 

 

<함수의 장점>

1) 기능을 나누어 코드를 효율적으로 구현할 수 있다.

2) 기능별로 함수를 구현해 놓으면 같은 기능을 매번 코드로 만들 필요가 없다.

3) 프로그램을 실행할 때 생긴 오류를 수정하는 디버깅 작업을 할 때도 편리하다.

 

**가능하면 하나의 함수에 하나의 기능만 구현하는 것이 좋다.

 

6. 객체 생성하기

클래스를 사용하기 위해서는 "객체"를 생성해야 한다.

new 예약어를 이용해 객체를 생성한다.

 

    클래스명 변수이름 = new 생성자();

 

ex) Student studentA = new Student();

 

7. 생성자

생성자란 객체가 생성될 때 멤버 변수의 값을 초기화하기 위해 사용되는 특별한 함수를 말한다.

생성자 이름은 클래스명과 같다.

생성자는 메서드가 아니고, 상속되지 않으며, 리턴 값이 없지만 앞에 void를 적지 않는다.

 

디폴트 생성자는 객체가 생성될 때 컴파일러가 자동으로 생성하는 코드이다.

클래스에 생성자를 추가하면 디폴트 생성자는 제공되지 않는다.

 

8. 생성자 재정의 (오버로드)

함수명은 같고 전달되는 인자의 자료형이 다른 함수를 정의하면 이를 메서드 오버로드라고 부른다. 즉, 다른 함수로 취급된다.

이를 이용해 생성자의 초기화 함수를 여러 개 정의할 수 있다. 이때, 전달되는 인자의 자료형과 개수를 달리 해야한다.

 

public class Person {
    String name;
    float height;
    float weight;
    
    public Person() {}    //디폴트 생성자
    
    public Person(String pName) {    //이름이 인자로 전달되는 생성자, 
        name = pName;                //pName을 전달하여 멤버변수 name을 초기화할 수 있다.
    } 
}

 

9. 참조 자료형

변수의 자료형에는 기본 자료형과 참조 자료형이 있다.

ㅇ기본 자료형에는 앞서 포스팅한 것과 같이 boolean, char, short, int, long, float, double이 있으며,

참조 자료형에는 String, Student, Person 등이 있다.

 

참조 자료형클래스 형으로 선언하는 자료형을 의미한다.

 

예를 들어, 학생 클래스에 (학번, 이름, 국어 성적, 수학 성적, 수강 과목 이름)이 있다고 하자.

이때 수업에 대한 각 속성을 학생 클래스에 정의하지 않고, 수업이라는 클래스로 분리해서 사용하는 것이다.

그럼 과목참조 자료형으로 선언되어서 학생 클래스에서 사용될 수 있다.

 

10. 정보 은닉

클래스의 외부에서 클래스 내부의 멤버 변수나 메서드에 접근하지 못하게 하는 경우에 사용된다.

이를 통해 오류를 줄일 수 있다.

 

일반적인 경우에 멤버 변수는 private을 선언하여 외부에서 접근하지 못하게 하고,

메서드는 public으로 선언하여 외부에서도 사용할 수 있도록 한다.

 

그래서 멤버 변수를 외부에서 접근하지 않고 객체를 생성할 수 있도록 생성자를 사용한다.

또한, 생성자를 이용하면 객체를 한번에 초기화 할 수 있다.

package exercise.domain;

public class Student {
    private int    studentId;
    private String name;
    private int    grade;
    private String address;
    
    public void courseRegistration() {
        System.out.println("수강신청");
    }
    public void takeAClass() {
        System.out.println("수업듣기");
    }
    public void takeATest() {
        System.out.println("시험보기");
    }
    
    public void showStudentInfo() {
        System.out.println(name + ", " + address);
        System.out.println(studentId + ", " + grade);
    }
    
    //생성자
    public Student (int pStudentId, String pName, int pGrade, String pAddress) {
        studentId = pStudentId;
        name = pName;
        grade = pGrade;
        address = pAddress;
    }
}     
package exercise.test;
import exercise.domain.Student;

public class StudentTest {

    public static void main(String[] args) {
        Student stu1 = new Student(1224, "홍길동", 1, "서울특별시");  //생성자 함수 호출 
        Student stu2 = new Student(1225, "이순신", 2, "충무로");      //-> 객체 한번에 초기화
        //함수에서만 멤버 변수 접근하도록
        
        stu1.showStudentInfo();
        stu2.showStudentInfo();     //메서드 호출

 

**private 멤버 변수를 클래스 외부에서 접근할 때에는 get() / set() 메서드를 제공한다.

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

[JAVA] 객체, 생성자, 계산기 예제  (0) 2021.01.11
[JAVA] 3의 배수의 합 구하기  (0) 2021.01.11
[JAVA] 조건문, 반복문  (0) 2021.01.10
[JAVA] 변수, 상수, 형변환, 연산자  (0) 2021.01.10
[JAVA] Eclipse 단축키  (0) 2021.01.10

+ Recent posts