일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카이제곱분포
- 자연어 논문 리뷰
- Statistics
- inner join
- 논문리뷰
- t분포
- 표준편차
- Window Function
- LSTM
- GRU
- NLP
- airflow
- HackerRank
- 자연어 논문
- 짝수
- sql
- update
- CASE
- 설명의무
- sigmoid
- SQL코테
- torch
- nlp논문
- 자연어처리
- 서브쿼리
- SQL 날짜 데이터
- MySQL
- 코딩테스트
- leetcode
- 그룹바이
- Today
- Total
HAZEL
[ CH02. 객체지향 입문 ] 객체 , 함수와 메서드, 인스턴스, 힙 메모리, 생성자 , 참조자료형, 접근 제어 지시자와 정보 은닉, this 본문
[ CH02. 객체지향 입문 ] 객체 , 함수와 메서드, 인스턴스, 힙 메모리, 생성자 , 참조자료형, 접근 제어 지시자와 정보 은닉, this
Rmsid01 2021. 3. 29. 13:33CH02. 객체지향 프로그래밍
: 패스트 캠퍼스 강의를 공부하고 정리한 내용입니다.
01. 객체와 객체 지향 프로그래밍
1. 객체 ( Object )
: 의사나 행위가 미치는 대상, 구체적 추성적 데이터의 단위
2. 절차지향 프로그래밍
: 시간의 흐름에 따른 프로그래밍 ex , C언어
3. 객체지향 프로그래밍
: 관계를 가지고 프로그래밍하는 것. ex, C++ , JAVA 등
4. 객체 지향 프로그램 구현 방법
: 객체를 정의하고, 각 객체 제공하는 기능을 구현하고, 그 객체가 제공하는 기능들 간의 소통을 통해 객체간에 연결 구현
- 클래스는 대문자로 시작, 자바 파일에 클래스는 여러개 있을 수 있지만, public클래스와 하나이고, 이름은 java파일과 동일해야함.
package ch02;
// public 은 어디서든 사용가능하다 ! 라는 개념
// 클래스가 여러개일 수 있지만, public 은 하나여야한다.
public class Student {
int studentNumber ;
String studentName;
// String - 기본 자료형이 아니라, 자바에서 제공하는 클래스
// 문자열 길게 사용할 때 사용하는 클래스
int majorCode;
String majorName ; // 이런것을 멤버 변수라고함
int grade;
}
02. 함수와 메서드
1. 함수 ( function )
: 하나의 기능을 수행하는 일련의 코드, 구현된 함수를 호출하고 기능이 끝나면 제어가 반환됨
: 하나의 기능을 구현하면, 다른 곳에서 반복해서 같은 코드를 작성하지 않아도 되기 때문에 좋음
2. 함수를 정의하는 방법
: 함수 이름, 매개변수 , 반환 값, 함수 몸체
- 수행만 하고 반환을 안하는 경우, int 대신에 void 를 사용하면 됨.
// 함수 이름과 매개 변수 ( 함수 몸체에서 사용되는 변수 )
int add (int num1, int num2){
int result ;
result = num1 + num2 ;
return result // 반환값
3. 함수 호출과 스택 메모리
스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리 , 함수의 수행이 끝나면 자동으로 반환되는 메모리
-> 함수안에 사용하는 값 ( 지역 변수 )
: main 에서 각 함수를 호출하면, 그 함수에 해당하는 지역변수를 위한 메모리 공간이 만들어지고, 그 함수가 다 수행되면 그 메모리는 사라진다.
4. 메서드 ( method )
: 객체의 기능을 구현하기 위해서 클래스 내부에 구현되는 함수 = 멤버 함수 ( member function )
: 메서드를 구현함으로써, 객체의 기능이 구현됨.
* 객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현
03. 인스턴스 생성과 힙 메모리
1. 인스턴스 ( instance )
: 클래스는 객체의 속성을 정의하고, 기능을 구현하여 만들어 놓은 코드 상태
: new 키워드 -> 인스턴스 생성
2. 힙 메모리
: 생성된 인스턴스는 동적 메모리 ( heap memory )에 할당됨
3. 참조변수, 참조 값
- jvm 이 주는 가상 주소를 할당 받게 된다.
System.out.println(studentKim);
//ch04.Student@1540e19d
4. 용어정리
a. 객체 : 객체 지향 프로그래밍의 대상, 생서된 인스턴스
b. 클래스 : 객체를 프로그래밍 하기 위해 코드로 정의해 놓은 상태
c. 인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
d. 멤버 변수 : 클래스의 속성, 특성
e. 메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
f. 참조변수 : 메모리에 생성된 인스턴스를 가리키는 변수
g. 참조 값 : 생성된 인스턴스의 메모리 주소값
04. 생성자 ( constructor )
1. 생성자
: 기본 문법 : < class_name > ([<argument_list]) {[<statements]}
: 객체를 생성할 때 - new Student() ; 객체를 생성할 때만 호출.
: 생성자는 반환값이 없고, 클래스의 이름과 동일함.
: 대부분의 생성자는 외부에서 접근 가능하지만, private으로 선언할 수 도 있음.
2. 기본 생성자 ( default constructor )
: 클래스에 반드시 적어도 하나 이상의 생성자가 존재.
생성자를 클래스에 구현하지 않아도, new 키워드와 함께 생성자 호출할 수 있음.
생성자를 안만들면, 컴파일러가 기본 생성자를 만들어준다.
public Student(){} - 매개변수도 없고, 구현부도 없음
3. 생성자 오버로딩 ( overloading )
: 생성자 이름을 동일하게 여러개 만드는 것. 사용자의 편리함.
05. 참조 자료형 변수
1. 참조 자료형
- 변수의 자료형의 종류
a. 기본 자료형 : int, long, float, double 등
b. 참조 자료형 : String, Date, Student 등
: 변수의 자료형, 클래스형으로 변수를 선언해야 한다.
: 기본자료형은 사용하는 메모리의 크기가 정해져있지만, 참조자료형은 클래스에 따라 다름
06. 접근 제어 지시자와 정보 은닉
1. 접근 제어 지시자 ( access modifier )
: 클래스 외부 클래스에서 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 정하는 키워드
- private : 같은 클래스 내부에서만 접근 가능 < 외부클래스 , 상속클래스에도 접근 불가능 >
: 멤버 변수의 오용을 예방할 수 있게 된다.
ex, month = 100 ; 와 같은 것을 예방해줌
- 아무것도 없음 ( defalut ) : 같은 패키지 내부에서만 접근 가능
-> 쓰고싶다면, import 를 사용해서 접근가능
- protected : 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 불가능
-> 하위 클래스가 상위 클래스에 접근 가능.
- public : 클래스 외부 어디서나 가능함
2. get() / set() 메서드
: private로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
: get() 메서드만 제공되는 경우를 read-only 필드라고 말함
3. 정보은닉 ( information hiding )
: private 으로 제어한 멤버변수도 public 메서드가 제공되면 접근 가능하지만, public으로 공개되었을 때보다 private 일때, 각 변수에 대한 제한을 메서드에서 제어할 수 있다.
: 정보 은닉으로 인해, 객체의 오류를 방지할 수 있다.
4. 정보 은닉을 활용한 캡슐화 ( encapsulation )
: 필요한 정보와 기능만 외부에 오픈함. 대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만 제공
07. this
: 객체 자신을 가리킴
1. this가 하는 일
a. 인스턴스 자신의 메모리를 가리킴.
-> 클래스 내에서 참조 변수가 가지는 주소 값과 동일한 주소 값을 가지는 키워드
b. 생성자에게 또다른 생성자를 호출할 때 사용
-> 클래스에 생성자가 여러 개 인경우, this를 이용하여 생성자에서 다른 생성자를 호출 할 수 있음
-> 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸수 없음
public class Person {
String name;
int age;
public Person() {
this("이름없음", 1);
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
c. 자신의 주소(참조값) 반환 함
// 자신의 주소를 반환하는 this
public Person getPerson(){
return this;
}
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "james";
p1.age = 37;
Person p2 = p1.getPerson();
System.out.println(p1);
System.out.println(p2);
}