클래스1
by Jm Park
1. 객체 지향 프로그래밍
객체 지향 프로그래밍(OOP: Object Oriented Programming)
부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해서 완성된 프로그램 기법
-
객체(Object)란?
자신의 속성을 가지고 있고 다른 것과 식별 가능한 것.
현실 세계의 객체를 소프트웨어 객체로 설계하는 것(필드/메소트로 정의하는 과정)을 객체 모델링(Obejct Modeling)이라 함. -
특징
-
캡슐화(Encapsulation)
객체의 필드, 메소드를 하나로 묶고, 실제 구현내용을 감추는 것.
외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있음.
외부의 잘못된 사용으로 객체가 손상되는 것을 방지하며, 노출 여부는 접근 제한자(Access Modifer)를 사용. -
상속(Inheritance)
상위 객체가 자신이 가지고 있는 필드/메소드를 하위 객체에세 물려주어 하위 객체가 사용할 수 있도록 하는 것.
하위 객체를 쉽고 빨리 설계할 수 있도록 해주며, 코드의 중복을 감소시키고, 유지 보수 시간을 최소화 시켜 줌. -
다형성(Polymorphism)
같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질.
자바는 다형성을 위해 부모 클래스 또는 인터페이스 타입 변환을 허용.
-
2. 객체와 클래스
- 클래스
객체를 생성하기 위한 필드와 메소드가 정의되어 있음.
-
선언 규칙
작성 규칙 예 하나 이상의 문자로 이루어져야 한다. Student, Food 첫 번째 글자는 숫자가 올 수 없다. 4Student(X) ’$’, ‘_’ 외의 특수 문자는 올 수 없다. #Food(X) 자바 키워드는 사용할 수 없다. int(x), for(x) 관례로 첫 글자는 대문자로 작성하며, 영어 대소문자를 구분함.
-
클래스 용도
라이브러리 클래스: 다른 클래스에서 이용할 목적으로 설계
실행 클래스: 프로그램의 실행 진입점인 main() 메소드를 제공. 실행클래스에서 라이브러리 클래스를 호출하여 활용하는 경우가 많음. -
- 객체
- 사용법
new연산자를 사용.
// 1. 클래스 변수 선언 후 해당 변수에 객체의 주소 저장 Student s1; s1 = new Student(); // 2. 클래스 변수 선언과 객체 생성을 동시에 실행 Student s2 = new Student();
- 사용법
3. 클래스의 구성 멤버
public class Student {
// 필드
int name;
// 생성자
Student() { ... }
// 메소드
int EditStudent() { ... }
}
- 필드
고유 데이터, 부품 객체, 상태 정보를 저장하는 곳.
변수와 비슷하지만 “필드≠변수” 이다.필드: 생성자와 메소드 전체에서 사용되며 객체가 소멸될 때까지 사용.
변수: 생성자와 메소드 내에서만 사용되고 생성자/메소드 실행 종료 시 자동 소멸.-
선언
클래스 중괄호{} 블록 어디서든 가능. (생성자, 메소드 내부 불가)
초기값이 지정되지 않은 경우, 기본 초기값으로 설정. -
사용
클래스 내부: 단순히 필드 이름으로 읽고 변경.
클래스 외부: 클래스 객체 생성 후 필드 사용. -
- 생성자
객체 생성 시 초기화를 담당.
클래스 이름으로 되어 있고 리턴 타입이 없음.- 선언
생성자에 매개변수가 있는 경우 new연산자로 생성자를 호출할 때 외부의 값을 생상자 블록으로 전달.
// 클래스 객체 생성 및 생성자 호출 Student s1 = new Student("홍길동",21,"컴퓨터공학과"); // Student 클래스 public class Student { // 생성자 Student(string name, int age, string major){ ... } }
-
생성자를 통한 필드 초기화
첫 번째, 정해진 초기값을 주는 방법.
두 번째, 매개값으로 전달된 값을 초기값으로 설정하는 방법.2번의 방법을 쓰는 경우, 관례적으로 매개변수 이름과 필드는 동일한 이름을 갖으며 이 관례로 인해 우선순위(필드 < 매개변수)가 낮은 필드에 접근 불가.
이를 해결하기 위해, this 를 사용.public class Student { // 필드 string name; int age; // 생성자 public Student(string name, int age) { this.name = name; // this.필드 = 매개변수 this.age = age; // this.필드 = 매개변수 } }
- 생성자 오버로딩(Overloading)
매개 변수를 달리하는 생성자를 여러 개 선언하는 것.public class Student { Student() { ... } Student(string name) { ... } Student(string name, int age) { ... } }
- 다른 생성자 호출(this())
생성자에서 다른 생성자를 호출할 때 this()를 사용.
생성자의 첫줄에서만 허용되며, 중복 코드를 줄여줌.public class Student { string name; int age; Student(string name) { this(name, 20); } Student(string name, int age) { this.name = name; this.age = age; } }
- 선언
-
메소드
객체의 동작에 해당하는 중괄호 {} 블록을 지칭.
필드를 읽고 수정하는 역할과 다른 객체를 생성해서 다양한 기능을 수행하기도 함.- 선언
메소드 선언부를 메소드 시그너처(signature)라고도 함.
리턴타입, 메소드이름, 매개변수, 기능 을 작성.void EditStudent(string name, int age) { ... }
- 매개 변수를 모를 경우
매개 변수를 배열 타입 혹은 리스트 타입 으로 선언.
/******** 배열 */ // 선언 int sum1(int[] values) { ... } // 호출 int[] values = {1, 2, 3}; int result = sum1(values); int result = sum1(int[] {1, 2, 4, 5}); /******** 리스트 */ // 선언 int sum2(int ... values) { ... } // 호출 int result = sum1(1,2,3);
- 메소드 오버로딩
같은 이름의 메소드를 여러개로 선언하는 것.
조건: 매개 변수의 타입/개수/순서 중 하나가 달라야함.
주의: 리턴 타입만 다르고 매개 변수가 동일할 경우는 컴파일 오류 발생. - 선언
참고 서적
이것이 자바다, 신용권 지음, 한빛미디어
Subscribe via RSS