티스토리 뷰

객체지향언어

  • 객체지향언어의 특징

    • 코드의 재사용성이 높다.(기존의 코드를 이용하여 새로운 코드를 작성)
    • 코드의 관리가 용이하다. (코드의 관계를 이용하여 쉽게 코드를 변경)
    • 신뢰성이 높은 프로그래밍이 가능하다.(제어자와 메서드를 사용해 데이터를 보호, 코드의 중복을 제거)

     

  • 클래스와 객체

    • 클래스: 객체를 정의해 놓은 것. 객체를 만들기 위한 설계도 같은 것. JDK(Java Development Kit)는 유용한 클래스(JAVA API)를 기본적으로 제공한다.
    • 인스턴스: 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며 클래스로부터 만들어진 객체를 클래스의 인스턴스(instance)라고 한다.

     

  • 인스턴스의 생성

    Tv t; // 클래스명 변수명;
    t = new Tv(); // 변수명 = new 클래스명();
    

    자바스크립트에서는 아래처럼 constructor를 만들고 인스턴스를 생성한다.

     

    class Tv {
        // TV의 속성(변수)
        String color;
        boolean power;
        int channel;
        
        // TV의 기능(메서드, 함수)
        void power() { power = !power; }
        void channelUp() { ++channel; }
        void channelDown() { --channel; }
    }
    
    class TvSet {
        public static void main(String args[]) {
            Tv t1 = new Tv(); // t1를 통해 Tv인스턴스에 접근.  
            Tv t2 = new Tv();
            t1.channel = 7;
            t1.channelDown();
            t2 = t1;
            System.out.println("현재 채널은 " + t2.channel + " 입니다."); // print 6;
        }
    }
    

    Tv t를 선언함으로서 메모리에 t를 위한 공간이 생긴다.

    new를 통해서 Tv의 인스턴스가 메모리의 빈 공간에 생성된다. 그리고 대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 t1, t2에 저장된다.

    t2 = t1가 시행되면 t2가 갖고 있던 주소값을 잃어버리고 t1에 저장되어 있는 주소값을 t2또한 참조하게 된다. t2가 기존에 참조하고 있던 인스턴스는 가비지컬렉터에 의해 자동 제거된다.

     

  • 객체 배열

    여러 개의 객체를 한꺼번에 생성하려면? 객체 배열을 생성하여 할 수 있다.

    Tv[] tvArr = new Tv[3]; // 길이가 3인 객체 배열 생성
    tvArr[0] = new Tv(); // 객체 배열의 각 요소에 저장
    tvArr[1] = new Tv();
    tvArr[2] = new Tv();
    
    Tv[] tvArr = { new Tv(), new Tv(), new Tv() }; // 한줄로 선언과 초기화 
    

     

메서드(Method)

  • 특정 작업을 수행하는 일련의 문장들을 하나로 묶는 것이다. 수학의 함수와 유사하다.
  • main()도 메서드로서 JVM에 의해 자바프로그램이 수행을 시작할 때 최초로 호출된다. main()은 자바프로그램 수행의 시작점이다.
  • 리턴타입이 void일 때에 뭔가를 리턴할 수는 없지만 return; 을 사용하면 그 메서드를 종료하라는 뜻이다.
  • 자주 필요로 하는 기능을 추가 메서드로 만들어서 활용하는 것이 일반적이다.
  • 배열을 매개변수로 하는 메서드

    static int add(int[] p) {
        int result = 0;
        for(int data : p) {
            result += data;
        }
        return result; 
    }
    
    // 출력
    public static void main(String[] args) {
        System.out.println(add(new int[] {10,20,30,40,50}))
    }
    

    위처럼 배열을 패러미터로 하면, 매개변수가 몇개든 그 작업을 수행할 수 있다. 이것을 더 간단하게 할 수 있는 새로운 문법(가변인자)은 아래와 같다. (javascript의 rest operator와 매우 유사) 가변인자를 사용하려면 다른 매개변수와 구분할 수 있도록 맨 마지막 매개변수로 넣어야 한다.

    static int add1(int...p) { // 타입 뒤에 ... 
        int result = 0;
        for(int data : p) {
            result += data;
        }
        return result;
    }
    
    // 출력
    public static void main(String[] args) {
        System.out.println(add1(10,20,30,40,50)) // print 150
    }
    

    참고로 자바스크립트는 아래와 같다.

    // Javascript
    function add(...args) {
        return args.reduce((a,b) => a+b); // reduce말고 당연히 for를 써도 된다. 
    }
    
    add(10,20,30,40,50) // print 150
    

 

  • 생성자 메서드(Constructor)

    자바스크립트에는 Constructor가 있다.

    // Javascript OOP 
    function Bird(name) {
    this.name = name; 
    this.Legs = 2; 
    }
    let blueBird = new Bird("Sally"); 
    blueBird.name; // print "Sally"
    blueBird instanceof Bird; // true(instance check)
    

    자바에도 생성자 메서드가 있다. 문법이 완전 같다.

    class Member3 {
    	int i;
    	String name;
    	String account;
    	String passwd;
    	int birthyear;
    	Member3() {
    		System.out.println("객체 생성");
    	}
    	Member3(String name, String account, String passwd, int birthyear) {
    		this.name = name;
    		this.account = account;
    		this.passwd = passwd;
    		this.birthyear = birthyear;
    	}
    	void print() {
    		System.out.printf("회원%d : %s(%s, %s, %d)%n", i, name, account, passwd, birthyear);
    	}
    }
    public class MemberTest3 {
    
    	public static void main(String[] args) {
    		Member3[] set = new Member3[3];
    		set[0] = new Member3("Alex", "Alex@mail.com", "secret1", 1990);
             ...
        }		
    }
    

    자바의 컨스트럭터는 오버로딩이 가능하며, 클래스 네임과 컨스트럭터 네임이 일치해야한다는 것이 특징이다.

'Java' 카테고리의 다른 글

Getter and Setter  (0) 2019.04.30
Continue  (0) 2019.04.30
자바의 2차원 배열  (0) 2019.04.26
자바의 1차원 배열  (0) 2019.04.25
자바의 입출력  (0) 2019.04.24
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함