프로그래밍  / 객체생성

 

이번 시간은 객체 생성 하는 방법에 대해서 알아 볼게요.

function 을 이용하여 객체의 속성을 지정해주고 메소드를 만들어서 그 속성을 어떻게 할것인지에 대한 지정을 해주고, 마지막으로 객체를 생성 하는 절차로 진행 됩니다.

자동차를 비유로 들어볼건데요.

자동차에는 공통적으로 이름을 갖고 있고 또 엔진을 갖고 있고 제작사가 있고 색을 갖고 있고 하죠 이러한 것들이 속성에 해당 하는데요.

그럼 자동차에 시동을 건다 달린다 등은 메소드에 해당한답니다.

그리고 객체 생성이란 것은 자동차를 만드는 것이라고 보면 됩니다.

즉, 속성을 지정하면 어디회사의 차인지 바퀴가 엔진을 무엇을 사용하는지 색은 무슨 색인지 몇명이 탈 수 있는지 이러한게 되며

메소드는 달린다 , 선다, 커브를 돈다 등이 되고

객체를 생성하는 것은 공장에서 아우디 R8을 만드는 것에 해당 한다고 보면 됩니다.

그럼, 속성을 선언해 보겠습니다.

속성은 function을 사용해서 만듭니다.

속성 선언

function makeCar(){ //makeCar 속성을 정의하는 함수의 이름입니다.
 // 자동차를 만드는 것을 예로 하므로 makeCar이라는 이름을 붙였으며,
 //사용자가 원하는 이름을 사용합니다.
 //속성은 this를 사용하여 선언합니다.
 //이름 속성을 만든다고 하면
this.name; // 이렇게 정의 합니다.
 //회사도 정의하면
this.company;
 //자동차의 칼라 정의
this.color;
 //탑승인원
this.numPeople;
 //그리고 이러한 자료들로 어떻게 할지에 대한 메소드를 출력합니다. 그래야 메소드와 연결이 됩니다.
this.meth = showCar; // meth 라는 속성 안에 showCar이라는 메소드 명을 지정하여 선언합니다.
 }

이제 메소드를 생성 해 봅시다. 이 메소드의 역할은 만든 자동차가 어디 회사의 것인지 몇명이 탈수 있는지 색은 무엇인지를 보여주는 기능을 합니다.

위의 속성 선언 소스에서 보면 메소드를 불러 오는 부분은 this.meth = showCar; 이곳 입니다.

그러므로 showCar이라는 메소드를 만들어 봅시다.

메소드도 속성 정의 처럼 function 을 사용하여 정의 합니다.

function showCar(){// showCar은 메소드의 이름
document.write("자동차 이름 : "+this.name+"<br />");
 document.write("자동차 제조사 : "+this.company+"<br />");
 document.write("자동차 탑승인원 : "+this.numPeople+"<br />");
 document.write("차량 색상 : "+this.color+"<br />");
 }

위와 같이 메소드를 만들고 이제 자동차를 만들어 봅시다. 이과정은 객체 생성이라고 합니다

 

 

다른 일을 하면서도 투잡(알바/부업)으로 월급 만큰 수익이 됩니다.

아래 접속하셔서 상담받아 보실 수 있습니다. (믿음의 재택부업회사)

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

6일차 수업 (다형성)

1. 다형성( polymorphism )

정의 : 하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

 

이런식으로 사용 ->  데이터형 변수명;

 

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

나. 메소드 인자

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.  

 

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

 

4. 원래 타입 식별

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

 

<다형성 최종 정리>

1) 상속
2) 다형성을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.

 

6. Object 클래스

7.toString() 메소드

 

<배운것>

Eclipse 에서 Argument 에서 문자열or숫자를 입력 받는다.

public static void main(String[] args) {

 

String a = args[*]; //그냥 문자열을 받아와 a에 저장 배열처럼 이용

double salay = Double.parseDouble(args[0]); //double 형으로 받아와 salay에 저장

 

}

에서 Argument 에서 args를 말하는 것!

먼저 .java 클릭후에 마우스 오른쪽 버튼을 누르고 run as -> run cofi....클릭

Argument 의 String prompt 클릭하고 적용

 

수업노트 ==========

1. 다형성( polymorphism : 폴리몰피즘 )

정의 : 변수는 데이터형을 갖는다. 따라서 저장할 데이터의 데이터를 알고 있다.

예> 데이터형 변수명;

    하나의 변수가 서로 다른 데이터를 저장할 수 있는 능력.

- 기본형 형태
예>
 short s = 10;
 int i = 20;  // i에 20 정수값 저장
     i = s;   // idp short타입 데이터 저장

 큰 타입 = 작은 타입;
 큰 타입과 작은 타입이 같은 종이라서 가능하다.
 작은 타입 = 큰 타입; //에러 발생
 -> 작은 타입 = (작은타입) 큰 타입;
- 참조형 형태

예> Employee e = new Manager();   // 다형성
      e = new Engineer();  // 다형성
      e + new Employee();  // 일반적 방법

    Employee e = new Manager();
    큰 타입 = 작은 타입;
    큰 타입과 작은 타입이 같은 종(상속 관계) 이다.

용도 : 하나의 변수로 재사용하자.

2. 다형성의 적용 형태

가. 배열
-> 배열은 같은 데이터만 저장가능하다.
-> 다형성을 적용하면 데이터가 달라도 된다.
만약, object 배열을 생성하면 모든 데이터를 저장 가능하다.

Object[] obj = new object[10];
obj[0] = "홍길동";
obj[1] = new Employee();
obj[2] = 12;

나. 메소드 인자
예>      Employee
Manager      Engineer
=> 세금 구하기
   일반 직원 : 10%
   관리자 : 20%
   엔지니어 15%

1) Employee : taxEmployee(){10%}
   Manager: taxManager(){20%}
   Engineer: taxEngineer(){15%}

2) 오버라이딩
   Employee : taxEmployee(){10%}
   Manager: taxEmployee(){20%}
   Engineer: taxEmployee(){15%}

3) 부모 클래스에 모두 구현하고 자식은 그냥 사용.

예> public void xxx( long i ) { }
 int x =10;
 xxx(x);
 short s = 20;
 xxx(s);


   Employee : taxEmployee(){ //Object 사용 가능
  10%
  20%
  15%
  }
   Manager :
  taxEmployee( new Manager());
   Engineer :
  taxEngineer( new Engineer());

3. 다형성의 메소드 호출

Shape s = new Rectangle(10,10); //다형성
s.getArea(); // 동적 바인딩 발생

* 동적 바인딩 발생
==> 메소드에서 발생
==> 다형성으로 생성시 발생
==> 정의 : 컴파일시에는 변수의 원래 타입의 메소드를 인식하고 실행시에는 실제로
    new 한 타입의 메소드를 인식하는 것.

4. 원래 타입 식별?

 : instanceof 연산자 사용
 : 변수명 instanceof 클래스명
-> 주의할점은 반드시 계층구조가 낮은 것부터 비교한다.

예>

5. 메소드의 인자로 데이터를 넘기는 방법

=> 자바는 call by value
가. 기본형을 인자로 넘기면 값이 복사된다. 따라서 받는 곳에서 데이터를 변경해도 원래 데이터는
    변경되 지 않는다.

나. 참조형을 인자로 넘기면 주소값이 넘어가고 따라서 동일한 주소를 가리키게 된다. 주소를
    받은 곳에서 데이터를 변경하면 원래 데이터도 변경된다.

=> call by value reference

다형성?
1) 상속
2) 다형성ㅇ을 적용하면 여러 데이터를 저장 가능하다.
따라서 식별방법이 필요하다.
3) instanceof 로 식별
4) 원래 데이터형으로 형변환하고 작업한다.


6. Object 클래스
- 최상위 클래스이다.
모든 클래스의 부모 클래스이다.
(java.lang.Object 의 모든 구성요소를 모든 클래스가 사용가능하다. )

- 대표적으로 2가지 메소드 사용법을 알자
가. toString() 메소드

나. equals() 메소드

7.toString() 메소드
=> 문자열로 변경하는 메소드.
=> 자동호출된다.
( 참조변수를 Print 메소드로 출력할때 자동으로 호출된다.)
예> String name = "xxx";
    System.out.println

=> 참조변수에는 위치값이 저장되어 있는데, console창에 출력되기 위해서는 문자열이 변경되어야 한다.
따라서 자동으로 toStirng() 붙는다.

=> Object의 toString() 메소드 구현은 다음과 같다.

  클래스명@16진수

예>  Object

Stirng    Date , Integer,
=> 대부분 API가 모두 오버라이딩되어 있다.
@ 대신에 실제갑 출력하게 구현되어 있다.

Person
=> 개발자가 명시적으로 만든 클래스이다.
따라서 @가 나온다.
=> 우리도 오버라이딩 하자

8. equals 메소드

-> Object 의 equals 메소드 구현은 다음과 같다.
  " ==  " 연산자로 비교되어 있다.
  ( 위치값 비교가 된다.)

예> Object : == 비교

String
 -> 대부분의 API가 모두 오버라이딩되어 있다. 
(실제값 비교하게 구현 되어 있다.)

Person
API 실제
* 동등비교

가. == 연산자
- 기본형
예> int n =3;
    int n2 = 3;
    if(n==n2) ==> 실제값 비교

- 참조형
예> Person p = new Person("박보영");
    Person p2 = new Person("박보영");
    if( p==p2) ==> 위치값 비교, false
따라서 참조형 동등비교는 == 비교하지 말고 equals 메소드로 사용한다.
(정말로 위치값을 비교하는 경우에만 == 사용한다. )

나. equals 메소드
- 참조형
- 실제값의 동등비교시 사용
예>
 String name = "박보영";
 String name2 = "박보영";
 System.out.println(name.equals(name2)); //true

 Person p = new Person("곽보근");
 Person p2 = new Person("곽보근");

 System.out.println(p.equals(p2));

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,

3일차 수업

 

1. 객체 ( objec )
주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미 

 

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
객체 ------------------> 클래스
속성 ------------------> 변수 (instance variable)
동작 ------------------> 메소드

 

3. 객체 추출
어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

 

4. 클래스 ( class ) 

a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.
  

 

5. 클래스 종류 2가지

 

가. 재사용 클래스 
나. 재사용 클래스를 핸들링하는 클래스 ( handling class ) 

 

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

문법 :  

클래스명 변수명 = new 클래스명();
Student sut = new Student();

 

7. 구성요소 접근

8. 은닉화 ( encapsulation ) 

객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )

 

9. 메소드 ( method ) 

용도 : 인스턴스 변수 값 설정 및 얻기
문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.


   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 

10. 오버로딩 메소드 (overloading method)

11. 메소드 종류

12. 생성자 ( Constructor )

용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
문법 :

 

 public 클래스명(인자){}
 

특징 : 메소드와 비슷하다.
리턴타입이 없다.
반드시 이름은 클래스명으로 지정한다.
호출해야 수행되고, 끝나면 돌아온다.
모든 클래스에는 자동으로 기본생성자를 제공한다.
(==> public 클래스명(){} )

생성자를 명시적으로 제공가능하다. 
단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
따라서 기본생성자는 항상 명시적으로 작성하자

  

가. worker 생성자 : public 클래스명(인자){}
나. caller 생성자 : new Student(); //콜러 생성자

 

====학습 세부사항 ====

 

1. 객체 ( objec )
객체란?
-> 주제가 바라보는 대상(사물)을 의미한다.
* 객체의 2가지 특성
a) 속성(attribut) : 객체를 표현하는 방법
b) 동작(operation): 객체의 행위를 의미

2. 객체지향 프로그래밍?
-> 현실세계의 객체를 이용해서 가상세계에서 표현하는 프로그래밍
개발방법을 '객체지향 프로그래밍'이라고 한다.

현실세계 ---------------> 가상세계
*객체 ------------------> 클래스
-속성 ------------------> 변수 (instance variable)
-동작 ------------------> 메소드

*객체관계 --------------> has a, is a 관계

3. 객체 추출
-> 어떤 어플리케이션을 하던지 필요한 객체를 추출하는 작업이 필요하다.
-> 필요한 것만 필터링하는 작업을 '추상화(abstraction)'라고 한다. 필요없는건 제거

분석  --->   설계    --->     구현    --->    테스트    ---> 배치
객체추출    다이어그램      소스코드
     ( 그림 )

4. 클래스 ( class )
- 문법 :
 public class 클래스명{ 
 }
- 클래스명은 첫글자 대문자, 의미있는 명사형으로 지정한다.
- 첫글자는 영문자로 지정하고 이후에 숫자지정가능하다.
  특수문자 2개 ( _ $ )만 사용가능하다
- 반드시 클래스명으로 파일저장해야 한다. ( 클래스명 = 파일명 ) 일치해야 한다.
<구성요소 3가지>
a) 인스턴스 변수 : 객체의 속성을 표현할 때 사용
b) 메소드 : 객체의 동작을 표현할 때 사용 , 인스턴스 변수를 관리할 때 사용한다.
     (변수에 값을 설정하거나 얻어오는 작업)
c) 생성자 : 인스턴스 변수에 값을 초기화하는 작업시 사용한다.

 예> 학생관리

 학생객체 -------------------------------------> Student
 - 학번, 이름 ,주소 ---------------------------> int snum;
       String name;
       String address;
 - 동작   -------------------------------------> 메소드

5. 클래스 종류 2가지

 가. 재사용 클래스 
 - 객체관련 클래스 , main 메소드가 없다.
 - 실행이 불가능하다. --> 핸들링 클래스를 통해서 사용이 가능하다.
 예> 학생객체, 컴퓨터 객체, ...

 
 나. 재사용 클래스를 핸들링하는 클래스 ( handling class )
 - main 메소드를 지정
 - 실행이 가능하다.

6. 객체생성 ( 인스턴스 화, 메모리 로딩 )
-> main메소드가 없는 클래스를 메모리에 올려주는 작업을 의미한다.

 문법 :
 클래스명 변수명 = new 클래스명();
 Student sut = new Student();

 * stu 변수
 - 변수
 - 참조형 변수 ( reference 변수 )
   위치값을 저장하는 변수
 - Student 클래스 타입의 변수

7. 구성요소 접근
  --> 객체생성후에 접근 가능하다.

 - 인스턴스 변수 ( 멤버변수 , 클래스 멤버 )
 ==> 참조형변수.멤버변수
 예) stu.snum = 1111;
     stu.name = "수지";
     stu.address = "청주";
  - 메소드 ( 벰버 메소드 , 클레스 멤버 )
   -> 용도 : 인스턴스 변수 값 설정 및 값 얻기

 - 생성자

8. 은닉화 ( encapsulation )

   a) 접근하는 곳

   b) 접근 당하는 곳
      -> stu.name = "수지";
         따라서 직접 접근하지 못하도록 private 로 설정한다.
  private int snum;
  직접접근은 못하고 다른 방법으로 접근한다.
  ( 메소드 이용 )
      예) 달력 객체
 public class MyDate{
  
  int day;
  int month;
  int year;
 }
 MyDate d = new MyDate();
 d.day = 40; //문법적으로는 문제가 없지만 논리적으로 문제발생
 
 * 객체지향 프로그래밍 3대 특징
   가. 상속( inheritance )
   나. 다형성 ( polymorphism )
   다. 은닉화 ( encapsulation )


9. 메소드 ( method )

 - 용도 : 인스턴스 변수 값 설정 및 얻기
 - 문법 :
 
 public 리턴타입 메소드명(인자) {
 return 값;  //호출한 곳으로 돌아갈 때 가지고 갈 데이터
 }          반드시 값의 데이터형을 리턴타입에 저장한다.
 - 특징 :
 - 반드시 클래스 객체생성 먼저
 - 반드시 호출해야 수행된다.
   수행이 끝나면 호출한 곳으로 돌아온다.
   ( return )

 -> 메소드안에서 선언되 변수인 로컬변수는
   메소드 호출시 생성되고 메소드가 끝나면 제거되는 임시 데이터
   저장용 변수이다. ( stack 메모리 )
 <용도 2가지>
a) 인스턴스 변수에 값을 설정
- setter 메소드라고 한다.
- 메소드명은 set변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      setName
      setSnum
      setAddress
b) 인스턴스 변수 값을 얻기
- getter 메소드라고 한다.
- 메소드명은 get변수명(첫글자 대문자)으로 지정한다.
  예) String name;
      getName
      getSnum
      getAddress
- 핸들링 클래스에서 값을 얻는다.

 아키텍쳐
 
 TestStudent                                Student
 
 0.Student 객체생성
  
  1. 호출              Stirng name;
  -------------------> public 리턴타입 getName(인자){

     return name;
         }
  2. 리턴
  <------------------- 

 - 호출방법
   가. 객체생성
    Student stu = new Student();

   나. 메소드 호출
    참조형변수.메소드명(인자);

    예) stu.getName();
 stu.getAddress();
 stu.getSnum();
  
 - 메소드 호출 방법
 : 반드시 메소드명과 인자(파라미터, argument)
   리스트가 일치해야 된다.
 : 인자 리스트
 갯수
 데이터형
 순서

 public void a(int x){  }
 public void b(String x){  }
 public void c(int x){  }

10. 오버로딩 메소드 (overloading method)
-정의 : 같은 클래스내에 동일한 이름의 메소드가 여러개 설정 가능하다.
같은 이름의 여러 메소드를 '오버로딩 메소드'라고 한다.

- 규칙 : argument list가 반드시 달라야 된다.

- 이유?
1) 재사용성
2) 서로다른 메소드를 관리하는 것보다 하나의 이름으로 관리하는것이 쉽다.

11. 메소드 종류

가. worker 메소드
    -> 일반적으로 메소드 지칭한다.
    -> public 리턴타입 메소드명(인자){  }
    -> 종류 2가지
       -setter 메소드
 public void set변수명(인자, 인자2){ }
       -getter 메소드
 public 리턴타입 get변수명(){
 return 값;
 }
나. caller 메소드
-> worker 메소드를 호출하는 메소드를 의미한다.
-> 객체생성후에 사용 가능하다

 예) Student stu = new Student();

 stu.setName("곽보근"); // caller 메소드 
 stu.setAddress("하복대");

 int s = stu.getSnum(); // getter 메소드
* 같은 클래스에서는 그냥 호출하면 된다.

예) getName();

12. 생성자 ( Constructor )

 - 용도 : 인스턴스 변수에 값을 맨 처음 설정하는 역할 ( 초기화 작업 )
 - 문법 :

         public 클래스명(인자){}
 - 특징 : 메소드와 비슷하다.
   리턴타입이 없다.
   반드시 이름은 클래스명으로 지정한다.
   호출해야 수행되고, 끝나면 돌아온다.
   모든 클래스에는 자동으로 기본생성자를 제공한다.
   (==> public 클래스명(){} )

   생성자를 명시적으로 제공가능하다.
   단, 생성자를 명시적으로 사용하면 기본 생성자를 제공하지 않는다.
   따라서 기본생성자는 항상 명시적으로 작성하자

   가. worker 생성자 : public 클래스명(인자){}
   나. caller 생성자 : new Student(); //콜러 생성자

13. 오버로딩 생성자
-> 하나의 클래스내에 동일한 생성자가 여러개 존재 가능하다.
-> 규칙 : argument list가 반

* 은행 프로젝트

- 고객, 직원, 계좌, 은행

- 계좌 객체 -----------------> Account
 : 계좌번호
 : 비밀번호
 : 잔액     -----------------> double balance;

 : 입금     -----------------> deposit 메소드
   출금     -----------------> withdraw 메소드

 : 생성자

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,