자바기초(객체지향)
04월 07일 내용정리
드뎌 자바의 핵심 객체지향 수업시작!!!
1.세상에 보이는 물건들 사람,동물등 모든 보이는 물체를 객체라고 칭한다.
객체는 상태와 동작으로 나누어 짐
소프트웨어객체는 상태를 필드(=멤버변수), 동작을 메서드로 정의 한다.
필드는 객체내부에 선언된 변수를 의미하고, 메서드는 객체내부에 정의된 동작이다.
예)자동차의 제작회사,모델,색,최고속도,엔지회전수...자동차가 가지고 있는 상태나 부품, 자동차를 표현해주는 모든정보들을 '필드'로 생각하면되고
자동차가 달린다,멈춘다, 경적을울린다,헤드라이터를 켠다/끈다 등 모든 동작하는 것들을 '메서드'로 생각하면 된다.
*필드에서는 기본값을 지정 하지않으면 자동적으로 기본값으로 저장된다.
int 는 0으로 double은 0.0 String은 null로 컴터가자동초기화 해줌
2.절차지향과 객체지향
절차지향 프로그래밍->동작을 순서에 맞춰서 실행하는것
객체지향 프로그래밍(OOP)->기본설계틀은 있고 필요한 부품을 각각 따로 만들어서 필요에따라 부품을 더하고 빼서 하나의 프로그램을 만들어가는 과정
예)자동차 만들때 기본설계가 있고, 부품별로 각각 만들고 설계도에 맞춰서 그 부품을 조립하여 자동차를 만듬
3.객체지향은 3가지 객체간의 관계가 있음.
(1)집합관계
(2)사용관계
(3)상속관계
4.'클래스'는 설계도 라고 생각하믄됨.
설계도를 통해서 만들어진 물체를 '객체' 또는 '인스턴스'라고 한다.
'클래스'는 필드, 생성자(생략가능함-> 컴파일이 자동생성해줌), 메서드 로 이루어졌으며, 여기서 '생성자'는 초기화를 해주는데, 붕어빵틀을 사용할수있도록 세팅을 해주는것과 동일하다.
5.객체만들기
(1)클래스만들기(선언하기)->붕어빵틀을 만들기
(2)클래스사용하기위해 준비하는 작업 (객체생성)->붕어빵틀가져다가 쓰기전에 세척하는등 세팅과정이 필요하다.
(3)객체사용->붕어빵틀을 이용하여 붕어빵을 만듬
6.객체지향특징 특징->캡슐화,상속, 다형성
(1)캡슐화:프로그램을 만들었을때 다른사람이 맘대로 변경할 수 없도록 막기위해서 숨겨놓고 일부분을 외부랑 연결해놓은것.왜?? 고유의 속성을 유지하기위함
예)자판기안에 커피와 같이 고유의 속성을 유지하면서 버튼하나로 커피(객체)를 만들수 있다.
(2)상속: 공통속성을 가져다가 + 특징을 덧붙여 새로운걸 만들어 내는데, 공통속성을 가져다 쓰는것을 상위개념인 부모의 특징을 물려 받았다 하여
'상속'이라한다.
[ 운송수단 ] ->부모
버스 자동차 트럭 ->자식
위와같이 버스,자동차,트럭 은 운송수단이라는 공통속성의 상위개념이 있고,
운송수단의 공통 특징을 기본설계로 버스는 버스에 맞게 특징을 추가해주고, 자동차는 자동차에 맞게 트럭은 트럭에 맞게 특징을 추가하여 생산.
이때 버스,자동차,트럭 은 운송수단이라는 공통속성을 뽑아내는것을 '추상화'라고 한다.
(3)다형성: 동일한 명령을 내리더라도 객체와 종류에 따라 다르게 실행되는 프로그래밍기법. 다형성을 이용하여 객체를 부품화 시킬수 있다.
예)move라는 같은 타입을 쓰지만 실행결과는 fly, run,swim 등 다를수 있다.
예)타이어를 만들때 국가에서 지정한 타이어규격에 맞춰서 만들되 한국타이어와 금호타이어의 각각 특징을 더해서 만든다.
- 클래스는 아래 3가지를 포함하고있다.
(1)필드
(2)생성자->생성자는 준비작업을 해주는 역할을 한다. 초기화를 시켜줌.
(3)메서드
int [] =new int [3] -> 여기서 new는 힙영역에 객체를 만들어라! int [3] 생성자로 int타입으로 공간3개를 만들어라!!
8.클래스의 특징
-클래스이름은 첫글자는 대문자로 쓴다.
-클래스이름이 소스파일 이름이다.
-하나의 소스파일에 둘이상 클래스가 있다면
하나만 접근제어자(public,privit...)을 쓸수 있으며 그게 main class가 된다.
-접근제어자(public,privit...)가 붙은게 소스파일이름과 동일해야한다.
왜? main class 이기 때문
9.Ball myBall = new Ball();
Ball클래스사용한다 선언
myBall은 참조변수(new로 생성한객체 생성의 주소가 담김)
new 는 객체생성하라!!
Ball(); 생성자로 Ball클래스를 초기화 시켜줌
- public class Ball {
//필드선언
int num;
String name;
//생성자
Ball(매개변수){초기화 할수있는 작업들}
Ball( ){ }
(1)생성자는 클래스이름과 같다.
(2)모든클래스는 생성자를 가지고 있으며 생략하면 기본생성자를 컴파일러가 자동으로 만들어줌, 그러나 생성자가 하나라도 만들어지면 자동생성 안됨.
(3)생성자는 생략가능하고 하나의 클래스에 여러 생성자를 선언할수 있다.(4)객체 생성시 초기화(객체를 사용할준비)를 한다.
(5)부모와 동일한 접근제어자와 동일한클래스이름을 쓰며, 리턴타입없다.
->이 부분이 메서드와 다른 부분
//메소드선언
void MethodName( ){ } ->리턴타입이 있고 생략도 가능하며 여러번 선언도 가능하다.
11.지역변수는 메서드 내부에 선언된 변수. 매개변수도 일종의 지역변수임.
필드는 객체가 생성될때 같이 메모리에 올라가기 때문에 객체가 없어지지 않는한은 계속 사용가능하다. 즉 필드는 바깥에 먼저 선언하여 끌어다 쓰는 개념이라 활동의 범위제한이 없다.
그러나 지역변수는 블럭안에서만 선언하고 사용가능하기 때문에 활동범위 제한이 있다.
참조할 클래스 생성-1
package study_0407;
//메인이 없음 가져다가 쓸거기 때문
public class study_0407 {
//필드 선언
double radius =2.0; // ->인스턴스 변수
//생성자 선언
//생성자를 생략해도됨 컴파이러가 생성자 만들어줌
//메서드
double getVolume() { // ->인스턴스 메서드
return 4/3*3.14*radius*radius*radius;
}
}
메인클래스-1
package study_0407;
public class study_0407_01 {
public static void main(String[] args) {
// 1.클래스 생성-study_0407
//2.객체생성 및 초기화작업-> new 클래스명();
study_0407 test =new study_0407();
//3.객체 사용
System.out.println(test.radius);
System.out.println(test.getVolume());
}
}
참조할 클래스 생성-2
package study_0407;
//메인이 없음 가져다가 쓸거기 때문
public class Car {
//필드
String company="기아자동차";
String modle="k7";
String color="파랑";
int maxSpeed=250;
int speed;
//생성자
//부모와 동일한 접근제어자와 동일한클래스이름을 쓴다
public Car() {};
//메소드
void move() {
System.out.println("자동차는 달린다.");
}
}
메인클래스-2
package study_0407;
public class CarExam {
public static void main(String[] args) {//메인클래스
// 객체생성
Car myCar= new Car();
System.out.println("회사"+myCar.company);
System.out.println("모델"+myCar.modle);
System.out.println("색깔"+myCar.color);
myCar.move();
}
}
Author And Source
이 문제에 관하여(자바기초(객체지향)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cbn1218/자바기초객체지향저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)