2학기 JAVA 스터디 2주차 과제

김남윤·2026년 9월 8일

1. 클래스

1-1. 클래스가 필요한 이유

1) 개별 변수 관리의 한계:

다루어야 할 데이터가 늘어날 때마다 변수를 개별적으로 추가 선언해야 하므로 유지보수가 어렵다.

2) 배열 사용의 한계:

여러 개의 배열로 나누어 관리할 경우, 한 사람의 데이터가 여러 배열에 분산되어 수정·삭제 시 실수가 발생하기 쉽다.

위와 같은 문제들을 해결하기 위해 클래스를 사용한다.

1-2. 클래스 도입

클래스를 사용해, 학생이란 개념을 만들고, 학생 별로 이름, 나이, 학점을 관리한다.

Student <= 클래스 (관례상 대문자로 시작, 낙타표기법 사용)
name, age, grade <= 맴버 변수 or 필드

1-3. 객체(인스턴스)

클래스가 "설계도" or "틀"이라고 한다면, 객체(인스턴스)는 설계도를 가지고 실제 메모리에 만들어진 실체를 객체(인스턴스)라고 함.

1-4. 객체 생성

1) 객체 생성 (new): 메모리에 Student 클래스 기반의 새 인스턴스를 확보한다.

2) 참조값 반환: 생성된 객체에 접근할 수 있는 고유 메모리 주소값(예: x001)을 반환한다.

3) 참조값 보관: 변수 student1은 인스턴스 자체가 아니라 객체의 참조값(주소)을 저장한다.

4) 멤버 접근 (.): 점 연산자를 통해 참조값을 따라가 실제 객체의 필드 값을 읽거나 대입한다.

주의

변수 대입 시 객체 자체가 복사되는 것이 아니라, 오직 참조값(주소)만 복사되어 전달된다.

참조값을 변수에 보관해야 하는 이유

객체를 생성하는 코드 자체에는 아무런 이름이 없음.
생성한 객체에 접근할 수 있는 방법이 필요
=> 객체를 생성할 때 반환되는 참조값을 보관해야 함.
저장한 참조값을 통해서 실제 메모리에 존재하는 객체에 접근할 수 있음.

2. 기본형과 참조형

2-1. 기본형 vs 참조형

1) 저장 데이터

기본형 => 실제 사용하는 연산용 값
참조형 => 메모리 상의 객체/배열 위치값 (참조값/주소)

2) 종류

기본형 => int, long, double 등 (소문자 시작)
참조형 => 클래스, 배열 등 (주로 대문자 시작)

3) 연산 가능 여부

기본형 => 산술 연산 가능
참조형 => 직접 연산 불가

4) NULL 허용

기본형 => 불가능
참조형 => 가능

2-2. 자바의 대원칙

항상 변수의 값을 복사해서 대입한다

1) 변수 대입

기본형 : 실제 값이 복사되므로, 한쪽의 값을 변경해도 다른 변수에 영향을 주지 않는다.

참조형: 참조값(주소)만 복사되므로, 두 변수가 동일한 메모리의 인스턴스를 가리킨다.
따라서 한쪽 변수를 통해 내부 멤버 변수를 수정하면 양쪽 모두 변경 사항이 반영된다.

3. 객체지향 프로그래밍

3-1. 절차지향 VS 객체지향

절차 지향은 절차를 지향 => 실행 순서를 중요하게 생각하는 방식 ("어떻게"를 중심으로 하는지)
객체 지향은 객체를 지향 => 객체를 중요하게 생각하는 방식 ("무엇을" 중심으로 하는지)

  • 차이점

절차 지향은 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있다.
반면 객체 지향에서는 데이터와 그 데이터
에 대한 행동(메서드)이 하나의 '객체' 안에 함께 포함되어 있다.

3-2. 절차지향 프로그래밍의 한계

절차자향 프로그래밍의 한계는 데이터와 기능이 분리되어 있다는 점이다.

데이터가 있는 곳을 수정하면, 관련 기능이 있는 곳도 따로 수정을 해야하는 유지보수의 관점에서 관리 포인트가 2곳으로 늘어나는 단점이 존재한다.

=> 객체지향 프로그래밍의 등장

3-3. 객체지향 프로그래밍

위 사진처럼 MusicPlayer클래스에 속성과 기능을 모두 정의
=> 데이터와 기능이 따로 분리되어 있지 않아 유지보수 관점에서 매우 효과적

이처럼 기능과 속성을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것을 캡슐화 라고 한다

4. 생성자

4-1. 생성자가 필요한 이유

1) 초기화 누락 방지: 객체 생성 후 필드 초기화 메서드를 별도로 호출하면, 호출을 깜빡했을 때 데이터가 비어 있는 유령 객체가 생길 위험이 있다.

2) 필수 제약 부여: 생성자를 도입하면 인스턴스를 만들 때 반드시 정의된 파라미터를 넘겨야 하므로 필수 데이터 입력을 강제할 수 있다.

4-2. this

인스턴스 자기 자신의 참조값(주소)을 가리킨다.

멤버 변수와 매개변수의 이름이 같으면 둘을 어떻게 구분할까?

이 경우 멤버 변수보다 매개변수가 코드 블럭의 더 안쪽에 있기 때문에
매개변수가 우선순위를 가진다.
=> 멤버 변수에 접근하려면 앞에 this.을 붙여주면 됨

  • this의 생략

this는 생략 가능.
이 경우 변수를 찾을 때 가까운 지역변수를 먼저 찾고, 없으면 그 다음으로 멤버변수를 찾는다. (멤버변수도 없으면 오류뜸)

4-3. 생성자의 특징

1) 생성자의 이름은 클래스와 같아야 한다. (첫 글자도 대문자)
2) 생성자는 반환타입이 없다.
3) 나머지는 메서드와 같음

  • 생성자 호출

0개의 댓글