클래스 CLASS_Part1

2022. 3. 2. 16:59·Programing/JAVA
  • 자바에서 생성되는 프로그램의 최소 단위
  • 기능(메소드)과 속성(멤버변수)로 구성
  • 사용자 정의 자료타입
  • 데이터와 기능을 함께 저장할 수 있는 자료구조

객체 지향 프로그래밍 OOP( Object Oriented Programming)

  • 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것

객체 지향 프로그래밍의 특징

추상화

  • 추상화의 사전적 의미는 특정한 개별 사물과 관련되지 않은 공통된 속성이나 관계 등을 뽑아내는 것
  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것으로 객체 지향적 관점에서 클래스를 정의하는 것
  • 예를 들어, 토끼, 고양이, 사자, 치타가 있을 때 이것들을 각각의 객체라 하며 이 객체들을 하나로 묶으려 할 때 동물 또는 생물이라고 묶는 것
  • 자바에서 추상화란 메소드(기능)와 멤버변수(속성)로 클래스를 만드는 것(설계도, 부모클래스)
  • 자바에서 추상클래스라는 용어는 완성되지 않은 클래스(미완성 설계도)

상속 - 재사용

  • 추상화한 클래스(부모클래스)에 각각의 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
  • 부모클래스에 정의된 기능은 새로 만들 않아도 사용 가능(재사용)
  • 자바에서는 다중 상속이 되지 않음

캡슐화, 은닉화

  • 캡슐화는 실제로 구현되는 부분을 외부에 드러나지 않도록 캡슐로 감싸 이용방법만을 알려주는것
  • 은닉화는 내부 데이터, 내부 연산을 외부에서 접근하지 못하도록 은닉(hiding) 혹은 격리(isolation)시키는 것
  • 변수에 접근지정자를 private 로 지정
  • setter , getter 를 사용해 변수의 접근, 제어

다형성

  • 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
  • 자바에서는 부모의 클래스형으로 자식의 클래스형를 참조
  • 부모의 클래스를 자식이 오버라이딩 했을 경우 부모의 형으로 자식을 참조하면 자식의 메소드가 실행됨
  • 상속, 인터페이스 구현된 클래스에서 메소드의 인자 전달등에서 다형성이 많이 활용됨

클래스와 인스턴스(instance)

클래스

  • 어떤 문제를 해결하기 위한 데이터를 만들기기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것

인스턴스(화)

  • 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용
  • 참조변수 : new 로 생성된 인스턴스의 주소를 할당 받은 변수

클래스 모델링 및 설계

모델링

  • 클래스의 속성과 기능을 도출하는 단계
  • 특성(속성) : 클래스를 특징 지울 수 있는 성질
  • 기능 : 객체가 할 수 있는 행위

설계

  • 특정 클래스를 정의 하는 것
  • 설계도면을 작성하는 것과 같은 개념

클래스 기본 구성

접근자 class 클래스이름 {
    변수; // 속성, 데이터 필드
    생성자(); // 기본생성자 - 생략가능 
    메서드();// 기능
}

클래스 생성

package chapter07;

public class Member {

}

클래스 사용

  • . 을 통해 속성, 메서드 접근
package chapter07;

public class MemberMain {

    public static void main(String[] args) {

        Member m = new Member();
        Member m2 = new Member();

        if (m == m2) {
            System.out.println("m개체와 m2객체는 같다.");
        } else {
            System.out.println("m개체와 m2객체는 같지 않다.");
        }
    }

}

Car클래스 생성 및 사용

생성

package chapter07;

public class Car {

    // 필드
    String color;
    String company;
    String type;

    // 메서드
    public void go() {
        System.out.println("전진하다.");
    }
    public void back() {
        System.out.println("후진하다.");
    }
}

사용

package chapter07;

public class CarMain {

    public static void main(String[] args) {

        Car tico = new Car();
        Car pride = new Car();

        tico.color = "화이트";
        tico.company = "현대";
        tico.type = "경차";

        pride.color = "블랙";
        pride.company = "기아";
        pride.type = "소형";

        tico.go();
        pride.go();
        System.out.println(tico.color);
        System.out.println(tico.company);
        System.out.println(tico.type);
        System.out.println(pride.color);
        System.out.println(pride.company);
        System.out.println(pride.type);

    }
}

Car클래스 배열에 저장 사용

package chapter07;

public class CarMain2 {

    public static void main(String[] args) {

        // Car 타입의 배열객체 생성
        Car[] cars = new Car[2];

                Car tico = new Car();
        Car pride = new Car();

        tico.color = "화이트";
        tico.company = "대우";
        tico.type = "경차";

                cars[0] = tico;

        pride.color = "블랙";
        pride.company = "기아";
        pride.type = "소형";

                cars[0] = pride;               


        System.out.println("0번 인덱스 color : "+cars[0].color);
        System.out.println("1번 인덱스 color : "+cars[1].color);

        cars[0].color = "블랙"; // 0번 인덱스 객체의 color 필드에 "블랙" 대입

        System.out.println("0번 인덱스 color : "+cars[0].color);
        System.out.println("1번 인덱스 color : "+cars[1].color);

                for(Car car : cars){
                     System.out.println(car.color);
                }
    }
}

데이터 필드

  • 인스턴스 생성시 속성이나 상태값을 저장하는 곳
  • 멤버변수 : 클래스변수와 인스턴스변수로 구분

변수 구분

  • 멤버변수와 지역변수로 구분

클래스변수 - 스태틱(static),전역(global) 변수

  • 클래스가 로드될 때 Class Arae의 Static 영역에 생성
  • 객체 생성 없이 클래스이름으로 바로 참조 가능
  • 변수 선언시 static 키워드 사용

인스턴스 변수 - 필드, 멤버변수

  • static 없는 변수
  • 객체가 생성 될 때 (new) 자동 초기화
  • 힙(heap) 영역에 생성 됨
데이터 타입기본값
정수 타입 0
실수 타입 0.0
문자 타입 '\U0000'
boolean false
참조형 null

로컬, 지역(local) 변수

  • 멤버변수가 아니면 모두 로컬 변수
  • 메소드나 실행블럭, 제어문 블럭, 초기화 블럭 안에 정의 된 변수
  • 블럭 밖에서 사용 불가
  • 스택(Stack)에 생성되면 메소드 실행 종료 시 자동 소멸
  • 자동 초기화 되지 않음

지역변수 범위 scope

package chapter07;

public class LocalVarTest {

    public static void main(String[] args) {

        int n = 0;

        {
            int a = 10;
        }

        // int b = a; // error 블럭에서 선언된 a 지역변수 

        for(int i=0; i<3; i++) {
            int j = 3;
        }

        // int b = i; error for() 선언된 i, for블럭에 선언된 j 지역변수

    }

    public static void nUse() {
        //int k = n; // main()에 선언된 n 지역변수
    }

}

클래스변수, 인스턴스변수 범위

package chapter07;

class Avante {

    static String company = "현대"; // 클래스 변수
    String color;   // 인스턴스 변수

}

public class VarEx {

    public static void main(String[] args) {

        // 클래스 변수 사용
        System.out.println("Avante 제조사 : "+Avante.company);

        Avante a1 = new Avante();
        Avante a2 = new Avante();

        // 인스턴스 변수의 값 변경
        a1.color = "화이트";
        a2.color = "블랙";

        // 인스턴스 변수 출력
        System.out.println("a1 색상 : "+a1.color);
        System.out.println("a2 색상 : "+a2.color);

        // 클래스 변수를 인스턴스 객체로 출력
        System.out.println("a1 제조사 : "+a1.company);
        System.out.println("a2 제조사 : "+a2.company);

        // 클래스 변수의 값 변경
        a1.company = "기아";

        // 클래스 변수의 값 변경 후 클래스변수와 인스턴스변수 출력
        System.out.println("Avante 제조사 : "+Avante.company);
        System.out.println("a1 제조사 : "+a1.company);
        System.out.println("a2 제조사 : "+a2.company);


    }


}

클래스변수, 인스턴스변수, 지역변수 범위

package chapter07;

class Local {

    String name;

    void process() {
        name = "홍길동";
    }

    void printAge1() {
        int age = 20; // 지역변수
        System.out.println(age);
    }

    void printAge2() {
        int age = 30; // 지역변수
        System.out.println(age);
    }

}

public class LocalValEx {

    public static void main(String[] args) {

        Local local = new Local();

        System.out.println(local.name); // null

        local.process();
        System.out.println(local.name); // 홍길동

        local.printAge1();
        local.printAge2();

        // for문 블록 내에서의 변수 선언
        for (int i=0; i<10; i++) {
            int temp = 0;
            temp += i;
        }

        //System.out.println(temp); // 에러

    }

}

 

'Programing > JAVA' 카테고리의 다른 글

클래스 CLASS_Part3  (0) 2022.03.02
클래스 CLASS_Part2  (0) 2022.03.02
배열 ARRAY  (2) 2022.02.28
함수 - 메서드 FUNCTION  (0) 2022.02.24
제어문 - 반복문 LOOP  (1) 2022.02.23
'Programing/JAVA' 카테고리의 다른 글
  • 클래스 CLASS_Part3
  • 클래스 CLASS_Part2
  • 배열 ARRAY
  • 함수 - 메서드 FUNCTION
쿠크
쿠크
  • 쿠크
    쿠크 개발자
    쿠크
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Kubernetes (2)
      • Programing (35)
        • JSP (3)
        • JAVA (22)
        • Spring (5)
        • HTML (5)
      • 이외 (12)
        • Git (2)
        • 임시 잡다함 (6)
        • IntelliJ (1)
        • 에러 모음 (2)
      • OS (2)
        • Docker (0)
        • Kubernetes (0)
        • Linux (2)
      • DataBase (2)
        • Mysql (1)
      • 토이 프로젝트 (0)
        • 게시판 만들기 (0)
      • Spring (0)
      • 부동산 or 주식 (0)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • 링크

    • 깃 허브 주소
  • 공지사항

  • 태그

    Linux
    java
    HTTP란
    클래스
    에러 발생
    error
    에러원인
    spring-framework
    jsp
    Database
    MVC
    IntelliJ
    HTML
    spring
    MySQL
    ubuntu
    상속
    스프링 특징
    spring-framwork
    kubernetes
  • hELLO· Designed By정상우.v4.10.3
쿠크
클래스 CLASS_Part1
상단으로

티스토리툴바