데이터융합 JAVA응용 SW개발자 기업 채용연계 연수과정 3일차 강의 정리

misung·2022년 3월 24일
0

공지사항

변수-조건/반복-클래스 순으로 진행한게 아니라 클래스 및 그 이후 (Spring, MySQL) 를 먼저 진행하여 실강 내용 정리에는 혼선을 빚을 수 있으므로 실강 내용과 다르게 순차적인 내용으로 정리할 예정

05 클래스와 객체 1

05-1 객체 지향 프로그래밍과 클래스

생활 속에서 객체 찾기

객체 : 학생, 밥, 학교, 버스 등
메소드 : 먹는다, 탄다, 간다

클래스란?

클래스는 객체의 속성과 기능을 코드로 구현한 것이다.

학생을 예로 들 경우 Student라는 이름을 갖는 클래스를 선언할 수 있을 것이고, 속성으로 학번, 이름, 학년, 주소 등을 갖게 할 수 있다.

public class Student {
	int studentID;
    int grade;
    String studentName;
    String address;
}

05-2 클래스 살펴보기

클래스 속성을 구현하는 멤버 변수

studentID, grade, studentName, address 등은,
객체의 속성을 나타내는 멤버 변수라고 한다.

클래스 기능을 구현하는 메서드

학생 객체에 학생 이름이나, 사는 곳을 출력하는 메서드를 만들어 줄 수 있다. 여기서는 두 속성을 다 출력하는 메서드를 만들어보자.

Student class

public class Student {
	...

    public void showStudentInfo() {
		System.out.println(studentName + ", " + address);
	}
}

MainClass

Student student = new Student();
		
student.address = "Seoul";
student.studentName = "Gil-Dong Hong";
student.showStudentInfo();

출력 :
Gil-Dong Hong, Seoul

패키지란?

패키지는 프로젝트의 소스 코드를 관리하기 위해 클래스 파일을 관련 있는 것들 끼리 묶을 수 있다.

05-3 메서드

함수란?

하나의 기능을 수행하는 일련의 코드.
간단한 예로는 두 수를 더하거나 빼는 등의 동작을 하는 기능을 수행하는 코드의 모음을 함수화할 수 있음.

함수의 입력과 반환

함수에는 입력값이 있고 결과값을 갖는다.
함수에 입력받는 변수를 매개변수라 하고 결과로 반환하는 값을 반환값이라 한다.

함수 정의하기

두 정수를 입력받아 더한 결과를 출력하는 함수가 있다면..

int add (int num1, int num2) {
	return num1 + num2;
}

1부터 100까지 더한 결과를 반환하는 함수가 있다면..

int getSumofOnetoHundred() {
	int result;
    for (int i = 1; i <= 100; ++i) {
    	result += i;
    }
    return result;
}

함수 호출하고 값 반환하기

위에서 정의한 add 함수를 실제로 사용해보자.

public class MainClass {
	public static void main(String[] args) {
    	int num1 = 10;
        int num2 = 20;
        
        System.out.println(add(num1, num2));
    }
    
    public static int add (int num1, int num2) {
    	return num1 + num2;
    }
}

출력 :
30

함수 호출과 스택 메모리

함수 내에서 매개 변수들을 value로 받아와 값이 복사되어 num1, num2의 공간 및 결과값을 반환하기 위해 result 변수 등을 만드는 경우, 해당 변수들의 메모리가 스택됨.

함수 호출이 끝나고 main으로 돌아간 경우 스택에서 메모리가 해제됨.

함수의 장점

동일한 코드를 여러 번 작성할 필요 없어 가독성이 좋아지고, 함수를 호출하면 편리함.

05-4 클래스와 인스턴스

클래스 사용과 main() 함수

JVM에서 프로그램을 시작하기 위해서 main() 함수를 호출함.

new 예약어로 클래스 생성

Student student = new Student();

이렇게 생성된 클래스를 인스턴스라 한다.

인스턴스와 참조 변수

참조 변수를 사용하면 인스턴스의 멤버 변수와 메서드를 참조할 수 있다.

System.out.println(student.studentName);
System.out.println(student.getStudentAddress());

인스턴스와 힙 메모리

Student student = new Student();

위와 같이 인스턴스를 하나 생성하는 경우, 해당 인스턴스가 힙 메모리에 생성된다.

student는 지역 변수로써 힙 메모리에 있는 인스턴스를 가리킨다.

05-5 생성자

생성자란?

다음과 같은 Person 및 PersonTest의 클래스 예제가 있다고 가정.

Person.java

public class Person {
	int age;
    String name;
}

PersonTest.java
...
Person per = new Person(); // 생성자
...

Person.java 에서 생성자를 따로 만들지 않았어도 디폴트 생성자가 따로 생성됨.

생성자 만들기

이름을 매개 변수로 받는 생성자를 만들어 본다고 한다면..

Person.java

public class Person {
	int age;
    String name;

    public Person (String name) {
    	this.name = name;
    }
}

이렇게 매개 변수를 받는 생성자를 만든 경우, 매개 변수를 전달하지 않는 경우의 생성자(디폴트)를 따로 마련해 주어야 함에 주의.

생성자 오버로딩

같은 이름을 가진 생성자를, 받는 매개 변수의 수를 달리하여 오버로딩 가능.

...
public Person (String name) {
	this.name = name;
}

public Person (String name, int age) {
	this.name = name;
    this.age = age;
}
...

05-6 참조 자료형

학생 클래스를 만들고, 학생이 수강하는 과목의 이름과 해당 과목에 해당하는 점수를 다른 클래스로 빼서 가져오도록 만들어보자.

Subject.java

public class Subject {
	String SubjectName;
    int scorePoint;
}

Student.java

public class Student {
	int studentID;
    String studentName;
    Subject korean;
    Subject math;
}

이렇게 구현하면 각 과목에 대한 이름 및 점수를 각각 선언하지 않아도 되어 깔끔하기도 하고 나중에 관리하기도 편하다.

05-7 정보 은닉

접근 제어자 살펴보기

기존에 선언했던 멤버 변수들은 public으로 되어 있어 외부에서 직접 접근할 수 있었지만, 접근 제어자를 private로 변경하고 외부에 공개된 메소드를 통해서만 이에 접근할 수 있도록 변경하도록 하자.

get(), set() 메서드

Person 클래스를 예로 들면...

Person.java

public class Person {
	private int age;

    public void setAge(int age) {
    	this.age = age;
    }
   
    public int getAge() {
    	return this.age;
    }
}

정보 은닉이란?

멤버 변수에 직접적으로 접근하는 경우, 멤버 변수에서 허용하지 않는 범위의 값 (예를 들면 달력에서의 최대 일 수는 31일까지지만, 실수로 100 등을 입력한 경우) 을 방지하기 위해서 멤버 변수를 private화 하고 public 메서드를 통해서만 접근할 수 있도록 하는 것이 바람직하다.

0개의 댓글