ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 클래스와 객체 + 생성자
    프로그래밍/JAVA 2020. 7. 26. 00:38

    객체 지향 언어의 특성

    캡슐화(Encapsulation)

    객체를 캡슐로 싸서 내부를 보호하고 볼 수 없게 하는 것

    외부의 접근으로부터 안전

    객체의 캡슐화가 기본 원칙 but 외부와의 접속을 위해 부분 공개 노출

    ex) TV는 내부를 캡슐화하고 On/Off 버튼, 채널 버튼, 음량 버튼 등을 리모컨과의 통신을 위해 공개 노출

     

    상속(Inheritance)

    자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장

    자식 클래스 == 서브 클래스 // 부모 클래스 = 슈퍼 클래스

     

    다형성(Polymorphism)

    같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현

    상속관계에 있는 서브 클래스에서 동일한 이름으로 메소드를 다시 구현하는 오버라이딩

    같은 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 오버로딩

     

    객체 지향 언어의 목적

    소프트웨어의 생산성 향상

    컴퓨터 산업이 발전 -> 소프트웨어 Life Cycle이 짧아짐 -> 새로운 소프트웨어의 수요 증가

    -> 단기간에 소프트웨어 공급 필요 -> 소프트웨어의 재사용을 위한 여러 기법을 가진 객체 지향 언어 탄생

    -> 소프트웨어의 생산성을 향상

     

    실세계에 대한 쉬운 모델링

    수학 계산이나 통계 처리 등의 데이터 처리 과정은 절차 지향 언어가 적합

    but 실세계에서 일어나는 일을 일련의 절차로 표현하기 어려움

    객체 지향 언어는 실세계의 요소들을 개체로 만들고, 객체 사이의 상호 작용을 표현 할 수 있음

     

    클래스와 객체(instance)

    클래스 : 객체를 만들어 내기 위한 설계도 혹은 틀

    객체 : 클래스 모양 그대로 생성된 실체

     

    객체들은 클래스들의 모양대로 모두 동일한 속성을 가지고 탄생하지만, 자신만의 고유한 값을 가짐

     

    한 클래스의 객체는 동일한 속성을 가지지만, 객체마다 속성 값은 서로 다름

     

    자바에서는 new 연산자를 이용하여 다음과 같이 객체를 생성

     

    Circle pizza = new Circle();

     

    new 연산자에 의해 객체가 생성될 때 다음과 같은 일이 발생함

    • Circle 타입 크기의 메모리 할당
    • Circle() 생성자(기본 생성자) 코드 실행

     

    다음은 객체 생성 예제

     

    public class Circle {
    	// 필드
        int radius;
        String name;
        
        // 생성자
        public Circle() {
        
        }
        
        // 메소드
        public double getArea() {
        	return 3.14 * radius * radius;
        }
        
        public static void main(String[] args) {
        	Circle pizza = new Circle(); // Circle 객체 pizza 생성
            pizza.radius = 10; // 피자의 반지름을 10으로 설정
            pizza.name = "자바피자" // 피자의 이름 설정
            double area = pizza.getArea(); // 피자의 면적 가져오기
            System.out.println(pizza.name + "의 면적은 " + area);
            
            Circle donut = new Circle(); // Circle 객체 donut 생성
            donut.radius = 2; // 도넛의 반지름을 2로 설정
            donut.name = "자바도넛"; // 도넛의 이름을 설정
            area = donut.getArea(); // 도넛의 면적 알아내기
            System.out.println(donut.name + "의 면적은 " + area);
            
         }
    }

     

    생성자

    생성자 : 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드

     

    /* 2개의 생성자를 가지는 클래스 예제 */
    
    public class Circle {
    	// 필드
        int radius;
        String name;
        
        // 매개 변수 없는 생성자 == 기본 생성자
        public Circle() {
        	// 필드 초기화
        	radius = 1;
            name = "";
        }
        
        // 매개 변수 있는 생성자
        public Circle(int radius, String name) {
        	// 매개 변수로 필드 초기화
            this.radius = radius; // 필드 radius = 매개변수 radius
            this.name = name; // 필드 name = 매개변수 name 
        }
        
        // 메소드
        public double getArea() {
        	return 3.14 * radius * radius;
        }
        
        public static void main(String[] args) {
        	Circle pizza = new Circle(10, "자바피자"); // Circle 객체 pizza 생성, 반지름을 10, 이름을 "자바피자"로 초기화
         
            double area = pizza.getArea(); // 피자의 면적 가져오기
            System.out.println(pizza.name + "의 면적은 " + area);
            
            Circle donut = new Circle(); // Circle 객체 donut 생성, 반지름을 1, 이름을 ""로 초기화
           
            area = donut.getArea(); // 도넛의 면적 알아내기
            System.out.println(donut.name + "의 면적은 " + area);
            
         }
    }

     

    생성자의 특징

    생성자의 이름은 클래스 이름과 동일

     

    생성자는 오버로딩할 수 있음

    - 매개변수의 개수와 타입만 다르다면, 클래스 내에 생성자를 여러 개 둘 수 있음

     

    생성자는 new 객체를 생성할 때 한번만 호출

    - 객체 생성은 반드시 new를 통해 이루어지며, 생성자는 이때 자동으로 한번만 호출

     

    생성자에 리턴 타입을 지정할 수 없음

    - 생성자는 어떤 값도 리턴하지 않음

     

    생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함

     

    Circle pizza = new Circle(10, "자바피자"); // Circle 객체 pizza 생성, 반지름을 10, 이름을 "자바피자"로 초기화
    ...
    Circle donut = new Circle(); // Circle 객체 donut 생성, 반지름을 1, 이름을 ""로 초기화

     

    기본 생성자

    매개변수와 실행 코드가 없어 아무 일도 하지 않고 단순 리턴하는 생성자

    == 디폴트 생성자

     

    생성자가 없는 클래스는 존재하지 않음

    => 객체가 생성될 때 반드시 생성자가 실행되기 때문

    ==> 따라서 생성자가 하나도 없으면, 컴파일러는 기본 생성자를 자동 생성

    but 기본 생성자가 자동으로 생성되지 않는 경우 존재

    => 생성자가 하나라도 존재하는 클래스일 경우

    why? 기존에 존재하는 생성자를 통해 초기화 하려는 개발자의 의도를 방해하지 않기 위해서

     

    this 레퍼런스

    현재 객체 자신에 대한 레퍼런스

    => 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스

     

    this() 

    클래스 내 다른 생성자 호출

     

    주의할 점

    this()는 반드시 생성자 코드에서만 호출

    this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용

    this()는 반드시 생성자의 첫 번째 문장이 되어야 함

     

     

    출처 : http://www.yes24.com/Product/Goods/61269276
     

    명품 JAVA Programming

    자바(Java)는 그 이전 시대에 있었던 프로그래밍 언어에서 한 차원 진화된 개념으로 개발된 가히 혁명적 언어이며 플랫폼이다. 한 번 작성된 자바 프로그램은 어느 컴퓨터, 어떤 운영체제에서도 �

    www.yes24.com

    댓글

Designed by Tistory.