티스토리 뷰
※ 객체지향이 무엇인가?
- 부품 객체를 먼저 만들고 이것들을 하나씩 조립해서 완성된 프로그램을 만드는 기법이다.
여기서 부품도 객체이고, 전체로 만들어진 것도 객체이다.
-> 여기서 아래에 나올 객체의 특징과 객체의 상호 작용, 객체의 관계3가지를 모두 설명한 뒤에
이 모든것이 객체 지향 프로그래밍이라고 말해야 한다.
※ 객체(Object)
- 객체는 이름이 있어야 한다.
- 속성 : 데이터 속성은 반드시 있어야 한다. (필드)
- 동작 : 동작은 있을수도 없을 수도 있다.
현실객체를 프로그래밍하는 것을 객체지향 모델링이라고 한다.
※ 객체의 상호 작용
▶객체를 사용한다 - 객체가 가진 동작이나 속성을 이용한다.
▶기능을 실행하도록 요청하는 것
==> 메소드 호출(객체가 다른 객체가 가진 메소드를 호출하면서 해당 기능을 요청한다. )
메소드가 호출되어서 실행 결과를 전달해주는 것을 return 이라고 한다.
※ Method vs Function
Method : 객체가 있어야 한다. 객체가 가진 동작을 메소드라고 한다.
Function : 단순히 실행 코드를 묶어 놓은 것이다. 객체 개념이 없다.
- 자바는 method는 존재하고, function이 없다.
- 자바스크립트는 method와 function 개념이 둘 다 존재한다.
[객체간의 관계 3가지]
- 객체 지향 프로그램에서는 객체는 다른 객체와 관계를 맺고 있다.
1. 집합 관계 : 완성품과 부품의 관계
2. 사용 관계 : 객체가 다른 객체를 사용하는 관계
3. 상속 관계 : 종류 객체와 구체적인 사물 객체 관계
[객체 지향 프로그래밍의 특징(캡슐화, 상속, 다형성)]
1. 캡슐화 (== 보호)
: 객체안의 데이터(객체의 속성이나 기능)를 보호하는 것이다.
2. 상속
: 부모가 가진 것을 물려받은 것을 재사용할 수 있다.
[상속의 효과]
1. 중복 코드를 줄여준다.
2. 유지 보수 편리하다.
3. 객체의 다형성을 구현할 수 있다.
3. 다형성
: 사용방법은 같은데 실행결과가 다르게 나온다.
[객체(Object)와 클래스(Class)]
[클래스]
※ 클래스 이름
: 한글X, 첫자는 대문자, 첫자에 숫자 X
※ 클래스 선언과 컴파일
: 소스 파일당 하나의 클래스를 선언하는 것이 관례이지만 두 개 이상의 클래스도 선언이 가능
단, 소스파일 이름과 동일한 클래스만 public으로 선언할 수 있다.
선언한 개수만큼 바이트 코드 파일이 생성된다.
[객체 생성과 클래스 변수]
1. new 연산자
: 객체를 생성하는 역할을 한다.
: 생성된 객체는 힙 메모리 영역에 생성된다.
2. 클래스 변수 (참조 타입 변수)
: new 연산자에 의해 리턴된 객체의 번지를 저장하는 변수이다.
: 힙 영역의 객체를 사용하기 위해 사용된다.
- 하나의 클래스로 여러 개의 객체를 만들 수 있다.
- new는 항상 새로운 객체 생성
[필드, 메소드, 생성자]
1. 생성자 : 객체를 만들기 위해서 사용하는 것
2. 필드, 메소드 : 객체가 만들어지고 나서 사용하는 것, 객체를 이용하기 위한 것
=> 클래스 블록에 변수 형태로 선언된 것들은 변수라고 부르면 안되고 필드라고 불러야 한다.
클래스 상에 필드를 선언만 하면, 0의 의미인 타입별 기본 값으로 초기화된다.
public class Car {
String company; // 값이 없는 것이 아니라 참조변수타입은 null로 초기화 되어 있다.
String model;
String color;
int maxSpeed; // 값이 없는 것이 아니라 0으로 초기화 되어 있다.
Body body; // 참조변수타입은 null로 초기화 되어 있다.
}
[생성자]
: 객체를 생성할 때만 쓰고 객체를 생성하고 난 후에는 쓰지 않는다.
※ 기본 생성자 (Default Constructor)
: 모든 클래스는 생성자가 반드시 존재하며 하나 이상을 가질 수 있다.
: 생성자 선언을 생략하면 컴파일러는 기본 생성자를 추가시킨다.
this : 객체 자신을 가리킨다.
※ 생성자 오버로딩 (Constructor Overloading)
- 자바는 매개변수의 타입으로 생성자를 식별한다.
- 생성자의 매개변수 타입의 순서를 구별한다.
package pr06.exam05;
public class Korean {
// Field - 밑에서 선언하더라도 위에서 사용할 수 있다.
// 일반 변수는 미리 선언되어야 사용할 수 있다.
String nation = "한국";
String name;
String ssn;
int age;
// Constructor Overloading
Korean(){ // this는 객체 자신을 가리킨다.
this("angelatto", "000000-0000000"); // this()는 내가(객체 자신)이 가진 생성자를 호출하겠다.
//주의 : 생성자 메소드 안에서 생성자를 호출할 때는 생성자가 가장 먼저 호출되어야 한다.
System.out.println("Korean() 실행");
}
Korean(String name) {
this(name, "000000-0000000", 1);
System.out.println("Korean(String name) 실행");
}
Korean(String name, String ssn) {
this(name, ssn, 1);
System.out.println("Korean(String name, String ssn) 실행");
}
Korean(String name, String ssn, int age) {
this.name = name;
this.ssn = ssn;
this.age = 1;
}
Korean(String name, int age, String ssn) {
this(name, ssn, 1);
}
}
[메소드]
※ 메소드와 필드 이름
: 한글X, 첫자는 소문자, 첫자에 숫자 X
※ 매개변수 선언
▶ 매개변수의 수를 모를 경우
1. 방법1
int sum1(int[] values) { }
int[] values = {1, 2, 3};
int result = sum1(values);
int result = sum1(new int[] {1,2,3,4,5});
2. 방법2 - 가변길이의 매개변수.
아래의 values 너도 배열이다.
int sum2(int ... values) { }
int result = sum2(1, 2, 3);
int result = sum2(1, 2, 3, 4, 5);
=> 두 방법의 차이
: 메소드를 호출할 때 다르다.
// 방법1
int getSum(int[] values) { // 메소드를 호출할 때 배열의 크기가 결정된다.
int result = 0;
for(int value : values) {
result += value;
}
return result;
}
sum = bs.getSum(new int[] {1, 2, 3});
// 방법2 - 가변인자
int getSum2(int ... values) {
int result = 0;
for(int value : values) {
result += value;
}
return result;
}
sum = bs.getSum2(1, 2, 3);
sum = bs.getSum2(1, 2, 3, 4, 5);
'프로그래밍언어 > JAVA' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 정적멤버
- es6모듈
- sequelize.fn
- java
- @functools.lru_cache
- os
- method와 function
- 자바스레드
- 생성자필드메소드
- jre
- @functools.singledispatch
- 객체지향개념
- nodejs
- nunjucks
- jdk
- ES6
- 자바스크립트Call-back
- 자바스크립트Promise
- 사용자정의예외클래스
- 클래스와객체
- 메이븐 저장소
- Git
- 자바빌드도구
- 익명자식객체
- 백준
- yarn start
- 인스턴스멤버
- dynamic-project
- @functools.wraps
- 백준2206 파이썬 풀이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |