2020. 9. 1. 17:08ㆍWeb_Back-end/JAVA_선행
◎ 객체지향 프로그래밍
- 다양한 기능을 하는 소프트웨어 객체들이 존재하고 이러한 객체들을 조합하여 원하는 기능을 구현하는 기법
- ex) 조립컴퓨터 : 각 컴퓨터 하드웨어 부품을 구입하여 조립한 것이 컴퓨터가 된다
◎ 객체
- 객체 (Object) : 객체 지향 기술의 핵심 개념
- 객체는 상태와 동작을 가지고 있다
- 객체의 상태는 객체의 속성이다
- 객체의 동작은 객체의 기능이다
- ex: 텔레비전의 경우 / 상태 : 채널번호,볼륨,전원상태 등 // 동작 : 켜기,끄기,채널&볼륨 변경 등
- 객체의 상태 & 동작 ----s/w---> 필드 & 메소드
- 필드 : 객체안의 변수(객체의 상태저장)
- 메소드 : 객체의 동작(특정한 작업수행)
- 객체 = 필드 + 메소드
객체 ( Object ) | |
상태 | 동작 |
객체의 속성 ex) 채널번호, 볼륨, 전원상태 |
객체의 기능 ex) 채널,볼륨 변경, 켜기,끄기 |
필드 | 메소드 |
객체안의 변수 (상태저장) |
객체의 동작 (작업수행) |
따라서 객체 = 필드 + 메소드 |
◎ 객체지향 프로그래밍 특징
① 캡슐화
- 캡슐화 : 코드의 재사용을 위해 데이터의 알고리즘을 하나의 묶음으로 정리하는 것
- 하나의 캡슐 = 객체
- 객체의 필드 <---매칭---> 데이터
- 객체의 메소드 <---매칭---> 알고리즘
- 캡슐화의 목적
- 응집력 ↑높이고, 결합도 낮춘다↓
- 정보은닉 : 객체의 유지보수를 위해 내부데이터를 보호해야함
- 따라서, 객체에 접근하려면 공개된 메소드를 이용하여 접근한다.
② 상속성
- 상속성 : 코드의 재사용을 위해 이미 작성된 클래스(부모)를 이어받아 새로운 클래스(자식)를 생성하는 기법
- 자식 클래스는 부모 클래스의 속성과 동작을 모두 물려받는다
- 자식 클래스만 필요한 기능을 추가 또는 변경하여 사용할 수 있다
③ 다형성
- 다형성 : 객체가 취하는 동작이 상황에 따라서 달라지는 것을 의미
- 서로 다른 타입에 속하는 객체들이 같은 이름의 멤버함수에 응답하여서 서로 다른 동작을 보여준다
- ex) speak -> 개 -> 멍멍 // speak -> 고양이 -> 야옹
④ 추상화
- 추상화 : 불필요한 정보는 숨기고 중요한 정보만을 표현하는 기법
- ex) TV를 객체로 나타내는 작업
- TV에 축척된 모든 기술 나타내기 -> 너무 복잡
- 따라서, 불필요한 것 삭제, 전원&채널&볼륨 기능만 있다고 가정
- -->>> 추상화는 개발자마다 달라진다 (개발자마다 객체에 대해 관심사가 다르기 때문)
◎ 클래스
- 클래스
- 객체의 형태를 정의하는 틀 (ex:와플기계)
- 객체 지향에서 소프트웨어의 기본 단위
- 클래스 사용이유
- 같은 종류의 객체가 많이 필요하기 때문
◎ 클래스의 구조
- 클래스는 데이터와 코드를 동시에 가지고 있다 (객체를 정의하는 틀이기 때문)
- 클래스 안에는 필드와 메소드들이 정의됨 -> 클래스의 멤버
- 필드는 객체안에서 정의된 변수 ( 자료형 + 변수이름 ) 로 선언
◎ main 클래스란
- D+1~D+8 사용해온 class는 main() 메소드만 가지고 있었음
- 일반적인 클래스 -> main()을 가질 필요 없음
- 특정한 클래스가 프로그램의 시작점이 되는 경우에 main() 메소드를 사용
EX) BICYCLE | Bicycle | class name |
name | fields (states) | |
weight | ||
price | ||
+move() | methods (behaviors) | |
+horn() |
◎ Java의 명명규칙
- 클래스 이름 (ex: Television)
- 대문자로 시작
- 메소드 이름 (addNums)
- 소문자로 시작 + 낙타체
- 상수이름 (PIE, PIE_OF_NUMS)
- 모든 글자 대문자
- 여러글자 언더바(_)로 구분
< 예제 1 클래스를 정의하는 방법 >
① Television class 생성 ② 3개의 필드 선언 (channel, volume, onOff)
//class Television
public class Television {
int channel;
int volume;
boolean onOff;
}
▶ 새로운 클래스를 정의하는 것은 프로그램에서 사용할 수 있는 새로운 자료형을 하나 추가하는 것과 같다
▶ 컴파일러는 Telebision 클래스도 하나의 자료형 (int와 같은) 으로 간주한다
< 예제 2 객체 생성 실습 >
① 예제 1번의 Television 클래스를 테스트하기위해 새로운 클래스 TelevisionTest 생성
② main() 함수를 통해 접근하기
public class TelevisionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Television tv = new Television();
tv.channel = 1;
tv.volume = 10;
tv.onOff = false;
System.out.println("텔레비전의 채널은: " + tv.channel + "이고, 볼륨은: " + tv.volume + "입니다.");
if(tv.onOff) {
System.out.println("tv가 켜져있습니다.");
}
else {
System.out.println("tv가 꺼져있습니다.");
}
}
}
▽ console

▶ Java에서 모든 문장은 클래스안에 들어가야 한다
▶ 객체 멤버 접근하기
- 객체의 필드나 메소드에 접근하려면 참조변수에 멤버연산자(.) 필요
- 최근에 필드대신 인스턴스 변수라는 용어도 사용
◎ new 연산자
Television tv = new Television();
==
Television tv;
tv = new Television();
tv -> 참조변수 (선언) // new Television(); -> 객체 생성
◎ 하나의 클래스에 여러개의 객체 생성
Television tv = new Television();
tv.channel = 3;
Television myTv = new Television();
myTv.channel = 7;
▲ 두 객체간 데이터는 완전히 분리되어 있다 = 참조 변수이기 때문
◎ 참조변수와 대입연산
※ 참조변수를 복사하면 참조값(주소)가 복사되어 동일한 객체를 참조하게 된다
// tv1을 통해 객체 필드 값을 변경하면 tv2의 필드 값도 변경됨
Television tv1 = new Television();
Television tv2 = tv1;
//이때는 tv2가 tv3의 객체를 가르킴 -> 순서대로 읽기 때문
Television tv1 = new Television();
Television tv2 = tv1;
Television tv3 = new Television();
Television tv2 = tv3;
◎ java 메모리 관리 - garbage collection
- new 연산자에 의해 히프 메모리(heap memory)에 할당된다
- 메모리는 무한하지 않으므로 사용하지 않는 객체는 삭제하여 메모리를 확보해야 한다
- 자바는 자동 메모리 수거 시스템을 사용한다---> garbage collection( gc, 쓰레기 수집)
- 객체에 대한 참조가 없다면 삭제시킨다
- Television myTv = new Television();
- myTv = null;
- --> 참조변수에 null이 대입되었기 때문에 제거된다
◎ 메모리 영역 (static, heap)
- static
- class가 들어감 -> 메모리에 한번 할당되어 종료될 때까지 유지
- heap
- new 연산을 통해 생성된 객체 -> garbage collector 가 수시로 관리
- 프로그램이 실행되는 동안 데이터가 수시로 바뀜
◎ 클래스와 소스파일
- 일반적으로 하나의 소스파일에 하나의 클래스만 담는 것이 원직
- --> 귀찮다면 하나의 소스파일에 여러 클래스를 넣을 수 있다
- 여러개의 클래스 중에서 public이 붙은 클래스의 이름과 소스파일의 이름이 일치해야한다
- main() 메소드는 여러 클래스에 포함 될 수 있다
- 실행시키고 싶은 main()이 들어있는 파일을 Run as 메뉴를 통해 실행시킨다
◎ 객체 생성과 사용
< 예제 3 객체 생성과 사용 >
- Box 클래스 작성
- 필드 : width, length, height
- Box 클래스를 정의하는 Box 객체 생성
- 가로 : 20, 세로 : 20, 높이 : 30 설정
- 가로, 세로, 높이 출력
public class Box {
int width;
int length;
int height;
}
public class BoxTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Box myBox = new Box();
myBox.width = 20;
myBox.length = 20;
myBox.height = 30;
System.out.println("박스의 가로는: "+myBox.width+"
\n박스의 세로는: "+myBox.length+"\n박스의 높이는: "+myBox.height+"입니다");
}
}
▽ console

'Web_Back-end > JAVA_선행' 카테고리의 다른 글
DAY+11 클래스와 메소드 심화(1)/ getter,setter,생성자 (0) | 2020.09.10 |
---|---|
DAY+10 메소드 (method) (1) | 2020.09.03 |
DAY+8 배열(ragged,jagged array & ArrayList) (1) | 2020.09.01 |
DAY+7 배열(단어 기본정리)/for-each, 복사, 난수, 2차원배열 (1) | 2020.08.30 |
DAY+6 배열(기본, 특징) (1) | 2020.08.28 |