-
(5주차 30일) 배열, 클래스, 필드수업 내용 정리 2024. 6. 10. 17:46
Java
> 배열(Array)
- 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 데이터를 읽거나, 데이터를 저장하는 방법을 제공한다.
- 배열 변수의 선언: 변수와 마찬가지로 배열을 사용하기 위해서는 배열 변수를 선언해야 한다.
- 배열 생성 및 초기화
- new 연산자로 배열 생성 및 초기화
- 값 목록으로 배열 생성 및 초기화
- 배열의 저장 구조
- 배열 변수는 참조 변수이다. 배열 변수는 Stack 영역에 생성된다.
- new 자료형[배열 크기] 구문을 실행하면 Heap 영역에 배열을 생성하고, 배열의 시작 주소를 반환한다.
- new 자료형[] {값, 값, 값, ... } 또는 {값, 값, 값, ... } 구문을 실행하면 주어진 값들을 요소로 가지는 배열을 Heap 영역에 생성하고, 배열의 시작 주소를 반환한다.
- new 자료형[배열 크기] 구문으로 배열을 생성할 경우 배열은 자동적으로 기본값으로 초기화된다.
- null(널)은 참조형 변수가 Heap 영역의 객체를 참조하지 않는다고 뜻하는 값이다.
- null 값을 가지고 있는 참조 변수를 사용하면 NullPointerException이 발생한다.
- 2차원 배열의 구조
> 열거 타입(Enumeration Type)- 데이터 중 한정된 값만을 갖는 데이터 타입을 열거 타입이라 한다.
- 열거 상수는 모두 대문자로 작성하는 것이 관례이며, 클래스와 동일하게 소스 파일을 생성해야 한다.
- 열거 상수는 단독으로 사용할 수 없고 반드시 열거 타입.열거 상수로 사용된다.
Week today = Week.FRIDAY;
- 열거 타입의 열거 상수에 다른 속성을 추가할 수 있다.
- 열거 상수의 괄호()를 넣고 추가로 속성을 작성한다.
- 열거 타입에 필드를 설정하고 Getter을 통해 읽어올 수 있다.
package com.beyond.enumeration.practice; public enum Week { MONDAY("월요일", "월"), TUESDAY("화요일", "화"), WEDNESDAY("수요일", "수"), THURSDAY("목요일", "목"), FRIDAY("금요일", "금"), SATURDAY("토요일", "토"), SUNDAY("일요일", "일"); private final String name; private final String shortname; //열거 타입의 생성자는 반드시 private으로 선언해야 한다. private Week(String name, String shortName) { this.name = name; this.shortname = shortName; } //열거 타입의 name 값을 읽어오는 메소드 public String getName() { return this.name; } //열거 타입의 shortName 값을 읽어 오는 메소드 public String getShortname() { return this.shortname; } }
클래스(Class)
> 객체
- 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성과 기능을 가지고 다른 것과 식별이 가능한 것을 말한다. (ex. 유형, 무형, 개념 등)
- 객체와 클래스
- 클래스는 객체의 특성(속성, 기능)을 정의하는 설계도이다.
- 객체의 속성은 필드를 통해서 정의한다.
- 객체의 기능은 메소드를 통해서 정의한다.
- 클래스로부터 메모리에 생성된 객체를 해당 클래스의 인스턴스(Instance)라고 한다.
- 객체(Object)는 프로그램에서 구현할 대상으로 이를 구현하기 위한 설계도가 클래스(Class)이고, 클래스로부터 메모리에 생성된 실체가 인스턴스(Instance)이다.
- 클래스는 객체의 특성(속성, 기능)을 정의하는 설계도이다.
> 객체 지향 프로그래밍(OOP, Object-Oriented Programming)
- 프로그램을 개발하는 기법으로, 객체들을 만들고 객체들을 연결해서 프로그램을 완성하는 기법
- 객체 지향 프로그래밍 특성을 지원하는 언어를 객체 지향 프로그래밍 언어라 한다.
> 클래스 선언
- 클래스 선언: [접근 제한자] [예약어] class 클래스명 { ... }
- 클래스명은 자바의 식별자 작성 규칙에 따라 만들어야 한다.
- 소스 파일의 이름은 반드시 선언된 클래스 이름과 같아야 한다.
- 접근 제한자는 public, default 설정이 가능하다.
- 클래스를 사용자 정의 자료형이라고 표현하기도 한다.
- 클래스의 구성 멤버로 필드(Field), 메소드(Method), 생성자(Constructor)가 정의된다.
public class Member { // 필드, 생성자, 메소드 정의 ... }
- 예시
package com.beyond.object.practice; /** * [클래스] * 클래스에서 사용 가능한 접근 제한자 * 1. public * : public으로 선언된 클래스는 아무 제약 없이 사용 가능하다. * 2. defauult * : 동일 패키지에서는 제약 없이 사용 가능하지만, 다른 패키지에서는 제한된다. */ public class Person { /** * 1. 필드 정의(객체의 속성) * - 접근 제한자 설정 * - 대체로 상단에 작성 */ private String name; private int age; /** * 2. 생성자 정의(객체 생성 시 호출 - 초기화) * - 클래스명과 동일해야 함 * - 반환 타입이 없음 * - 생성자 오버로딩 가능 */ public Person() { System.out.println("생성자 호출"); } /** * 3. 메소드 정의(객체의 기능) * - 매개변수 전달 가능 */ public void setName(String name) { //ex. "홍길동": 매개값, String name: 매개 변수 this.name = name; //this: 객체 자기 자신(매개 변수와 필드명을 구분하기 위함) } public void setAge(int age) { this.age = (age >= 0) ? age : 0; } public void whoAreYou() { System.out.printf("안녕하세요. 저는 %s입니다. 나이는 %d세입니다.\n", name, age); } }
> 객체 생성
- 객체 생성: 클래스명 변수명 = new 클래스명();
- new 연산자는 힙 영역에 객채를 생성하고 객체의 주소값을 리턴
- 객체의 주소값은 참조 타입인 변수에 저장해서 객체를 사용할 수 있다.
// new 연산자와 클래스의 생성자를 사용해서 객체를 생성한다. Member member = new Member();
- 예시
public class ObjectApplication { public static void main(String[] args) { Person hong = new Person(); Person lee = new Person(); hong.setName("홍길동"); hong.setAge(24); hong.whoAreYou(); lee.setName("이몽룡"); lee.setAge(20); lee.whoAreYou(); } }
필드(Field)
> 필드
- 객체의 데이터, 상태 등 속성을 저장하는 공간이다.
- 선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지 않는다.
- 생성자와 메소드 전체에서 사용되며, 객체가 생성되고 소멸되기 전까지 객체와 함께 존재한다.
> 필드 선언
- 필드 선언: [접근 제한자] [예약어] 자료형 변수명[ = 초기값];
- 클래스 중괄호 블록 어디서든 존재 가능하다.
단, 생성자와 메소드 중괄호 블록 내부에는 선언될 수 없다. - 접근 제한자는 public, private, default, protected 설정이 가능하다.
- 초기값은 선언 시 지정될 수 있고, 생략될 수도 있다.
단, 초기값이 지정되지 않은 필드는 자동으로 기본 초기값으로 지정된다.
- 클래스 중괄호 블록 어디서든 존재 가능하다.
public class Member { // 필드 정의 public String name; // null private int age = 20; // 생성자, 메소드 정의 ... }
- 예시
package com.beyond.field.practice; public class User { // 필드 선언 public String id = "hong"; private String password = "1234"; String name = "홍길동"; public void test() { System.out.println(id); } }
> 필드 사용
- 같은 클래스 내부에서는 생성자와 모든 메소드에서 필드 사용이 가능하다.
- 같은 클래스가 아닌 외부에서 필드를 사용하려면, 클래스로부터 객체를 생성하고 필드 사용이 가능하다.
- 접근 제한자가 public인 경우, 도트(.) 연산자를 사용하여 필드에 접근할 수 있다.
- 예시
public class User { // 필드 선언 public String id = "hong"; private String password; String name = "홍길동"; public void test(int number) { //매개변수 /** * 1. 매개변수는 스택 영역에 생성될 때 함께 생성됨. * 실행흐름이 끝나면, 스택 영역이 소멸되면서 함께 소멸됨 * 지역변수와 유사하다. * 2. 지역변수의 경우, 초기화가 필요하지만, * 매개변수의 경우 메소드를 호출할 때 값을 반드시 넘겨줘야 하므로 * 매소드 내에서 초기화할 필요가 없다. * 3. 지역변수에는 접근 제한자를 붙이지 않는다. */ int num = 20; //지역변수 System.out.println("num = " + num); System.out.println("number = " + number); /** * 필드는 클래스 전역에서 사용이 가능하다. (생성자, 메소드) * 필드가 초기화되지 않은 경우, 기본값으로 초기화 */ System.out.println("password = " + password); } }
'수업 내용 정리' 카테고리의 다른 글
(5주차 32일) 상속, 다형성, 추상 클래스 (1) 2024.06.12 (5주차 31일) 접근 제한자, 생성자, 메소드, 정적 멤버, final (0) 2024.06.11 (4주차 26일) 제어문 실습(조건문, 반복문, 분기문) (0) 2024.06.08 (4주차 24일) Scanner 메소드, 연산자 실습 (0) 2024.06.05 (4주차 23일) Java 기초, 변수의 자료형 (1) 2024.06.04 - 배열은 같은 타입의 데이터를 연속된 공간에 나열시키고, 각 데이터에 인덱스(index)를 부여해 데이터를 읽거나, 데이터를 저장하는 방법을 제공한다.