
📕 객체지향 프로그래밍과 객체
1. 객체(object)
- 프로그래밍에서의 객체
-> 프로그램에서 표현하고자 하는 기능을 묶기위한 단위
2. 객체지향 프로그래밍
3. 객체를 구성하는 단위
- 객체를 이루는 것은 데이터와 기능이다.
-> 데이터는 변수로 표현된다.
-> 객체안에 포함된 변수를 멤버변수 혹은 프로퍼티라고 한다.
-> 기능은 메서드(=함수)로 표현이 된다.
4. 클래스와 객체의 관계
- 객체를 생성하기 위해서는 객체의 설계도가 필요하다.
5. 클래스
- 객체의 설계도 역할을 하는 프로그램 소스
- 공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는것처럼
하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러개 생성할 수 있다.
- 동일한 설계로 만들어진 자동차라 하더라도, 각각의 자동차를 구성하는 부품들은
그 형태만 같을 뿐, 실제로는 각각 존재하게 된다.
- 클래스를 작성하면서 그 안에 생성되는 멤버변수들은 여러 개의 객체간에 서로 동일한
이름으로 존재하지만 실제로는 서로 다른 값이라는 의미
6. 클래스의 기본 작성 방법
class 클래스이름 {
멤버변수;
void 메서드이름(){
...
}
}
- 'class'라는 예약어와 클래스의 이름을 명시하고{...} 블록으로 구성한다.
- 멤버변수는 여러개 존재할 수 있다. 이 때, 값을 선언과 동시에 할당할 수 있고,
객체를 통해 간접적으로 할당할 수도 있다.
- 메서드는 여러개 존재할 수 있다.
- 클래스 안에 포함된 멤버변수와 메서드를 특성에 따라 그룹화 하기 위한 기법이
클래스를 작성하는 것이라고 이해할 수 있다.
7. 객체의 생성 방법
8. 객체의 사용
- 객체 안에 포함된 변수나 메서드는 점(.)으로 연결하여 접근한다.
-> 객체이름.멤버변수 = 값;
-> 객체이름.메서드이름();
-> 객체이름.메서드이름(값1, 값2, ..);
9. 클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우
- 객체를 생성함과 동시에 객체안에 name변수와 age변수가 할당된 값을 포함하게 된다.
- 같은 클래스로 객체를 여러 개 생성할 경우, 모든 객체가 동일한 값을 갖게된다.
- 멤버변수의 값을 지정하기 전까지 사용될 "기본값" 으로서의 의미이다.
- 일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않는다.
10. 메서드를 포함하는 클래스
- 메서드란 프로그램에서 하나의 동작 단위를 의미한다.
- 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우,
이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다.
- 클래스에 멤버변수와 메서드가 공존할 경우, 멤버변수는 모든 메서드가 공유하는
전역 변수로 존재하게 된다.
11. 변수의 종류
-
멤벼변수(=전역변수)
-> 클래스 안에서 선언된 변수로서, 클래스 블록 범위 안에서 유효하다
-
지역변수
-> 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
그러므로 다른 메서드는 해당변수를 인식하지 못한다. 이 규칙은 조건,반복분과
같은 블록{}을 형성하는 모든 경우에 해당된다.
12. 메서드만을 포함하는 클래스
- 객체 안에 멤버변수(=데이터)가 포함되지 않는다.
- 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로 굳이 여러 개의
객체를 생성할 필요가 없다.
📕 this
1. this란
- 자기 자신을 의미하는 키워드
- 클래스 안에서 this를 사용하여 "자기자신"을 표현한다.
2. this를 사용하여 지역변수와 멤버변수 구분하기
class User{
String name;
public void setName(){
String neme;
name = "자바학생"
}
}
- 멤버변수와 지역변수가 동일한 이름으로 공존할 경우, 유효성의 범위가 작은 변수가
우선적으로 인식된다.
class User{
String name;
public void setName(){
String neme;
name = "자바학생"
//현재 클래스의 자신의 변수,
// 즉, 멤버변수로 선언된 name을 의미한다.
this.name ="자바";
}
}
3. this를 사용하여 파라미터와 멤버변수 구분하기
- 파라미터도 해상 메서드 안에서만 유효한 지역변수의 일종이다.
- 파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고자 할 경우,
변수의 이름을 서로 다르게 사용하는 것 보다는 이름은 동일하게 지정하고 this 키워드를
사용하여 멤버변수와 파라미터를 구별하는 것이 java언어의 일반적인 처리 방식이다.
class User{
String name;
public void setName(String name){
this.name = name;
}
}
----------------------------
User u = new User();
u.setName("자바학생");
System.out.println(u.name); // 자바학생
- 모든 멤버변수 앞에는 this 키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이
소스코드의 가독성을 위하여 바람직하다.
4. 현재 클래스의 메서드를 의미하는 용도로서의 this
class User{
public String getName(){
String name = "자바학생"
return name;
}
public void sayName(){
String myname = this.getName();
System.out.println(myname);
}
}
- 메서드의 경우 다른 클래스의 메서드를 이름만으로 호출할 수 있는 방법이 없기 때문에,
this.getName()이 아닌, getName() 만 사용하더라도 코드 가독성의 문제는 없다.
📕 클래스, 메서드, 상수의 이름 규칙
1. 공통 이름 규칙
- 영어 + 숫자 + 언더바(_)의 조합이고, 첫 글자는 반드시 영어로 표기한다.
2. 클래스 이름규칙
-
첫 글자는 대문자로 시작, 나머지 글자는 소문자로 표시한다.
-
두 개 이상의 단어를 조합해야 할 경우 새로운 단어는 대문자로 시작한다.
class MyClass
class Student
class NetworkHelper
3. 메서드, 변수 이름 규칙
- 대부분 소문자로 구성되지만, 두개 이상의 단어를 조합할 경우 새로운 단어는 대문자로 표시한다.
4. 상수 이름 규칙