yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/Java

객체지향 프로그래밍 정리

2022. 3. 19. 16:14

1. 클래스

package JumpTo;

class Animal {
    String name;  // 객체 변수 = 인스턴스 변수 = 멤버 변수 = 속성 (클래스에 선언된 변수)

    public void setName(String name) {
        // setName 메소드 내부에 사용된 this는
        // Animal 클래스에 의해 생성된 객체를 지칭한다.

        // 만약 Animal cat = new Animal()과 같이 cat이라는 객체를 만들고
        // cat.setName("body")와 같이 cat 객체에 의해 setName 메소드를 호출하면
        // setName 메소드 내부에 선언된 this는 바로 cat 객체를 지칭한다.
        // 따라서 this.name = "body"는
        // cat.name = "body"로 해석된다!

        this.name = name;  // this.name = "body";
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();  // cat이라는 객체 만듦
        cat.setName("body");  // 메소드 호출

        Animal dog = new Animal();
        dog.setName("happy");

        System.out.println(cat.name);  // body
        System.out.println(dog.name);  // happy
        // name 객체 변수는 공유되지 않는다는 것을 확인할 수 있다!
        // 객체 지향적이라는 말도 결국 이 객체 변수의 값이 독립적으로 유지되기 때문에 가능한 것이다.
        // 객체 변수 값은 공유되지 않지만 static을 이용하면 객체 변수를 공유하도록 만들 수도 있다.

    }
}

 

2. 메소드

package JumpTo;

public class Sample {

    int a;  // 객체변수 a

    void varTest(Sample sample) {
        sample.a++;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.a = 1;
        sample.varTest(sample);
        System.out.println(sample.a);  // 2 출력
    }
}
package JumpTo;

public class Sample {

    int a;  // 객체변수 a

    void varTest() {
        this.a++;  // this를 활용
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.a = 1;
        sample.varTest();
        System.out.println(sample.a);  // 똑같이 2 출력
    }
}

 

3. 생성자

package JumpTo;

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void sleep() {
        System.out.println(this.name + " zzz");
    }
}

class HouseDog extends Dog {
    // 메소드명이 클래스명과 동일하고 리턴 자료형을 정의하지 않는 메소드를
    // 생성자(Constructor)라고 한다.

    // 생성자의 규칙
    // 1. 클래스명과 메소드명이 동일하다.
    // 2. 리턴타입을 정의하지 않는다.(void도 사용하지 않는다.)
    HouseDog(String name) {
        this.setName(name);
    }

    void sleep() {
        System.out.println(this.name + " zzz in house");
    }

    void sleep(int hour) {
        System.out.println(this.name + " zzz in house for " + hour + "hours");
    }
}

public class Sample {
    public static void main(String[] args) {
        /*HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();
        houseDog.sleep(3);*/
        HouseDog dog = new HouseDog("happy");
        System.out.println(dog.name);  // happy 출력
    }
}
package JumpTo;

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Dog extends Animal {
    void sleep() {
        System.out.println(this.name + " zzz");
    }
}

class HouseDog extends Dog {
    HouseDog(String name) {
        this.setName(name);
    }

    // 생성자 오버로딩
    HouseDog(int type) {
        if (type == 1) {
            this.setName("yorkshire");
        } else if (type == 2) {
            this.setName("bulldog");
        }
    }

    void sleep() {
        System.out.println(this.name + " zzz in house");
    }

    void sleep(int hour) {
        System.out.println(this.name + " zzz in house for " + hour + "hours");
    }
}

public class Sample {
    public static void main(String[] args) {
        HouseDog happy = new HouseDog("happy");
        HouseDog yorkshire = new HouseDog(1);
        System.out.println(happy.name);  // happy 출력
        System.out.println(yorkshire.name);  // yorkshire 출력
    }
}

'~2023.02 > Java' 카테고리의 다른 글

[자바의 정석] 지네릭스(Generics)  (0) 2022.06.25
자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 설계하기  (0) 2021.12.30
자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 만들기  (0) 2021.12.29
자바 기초 _ [토픽1] 자바 왕기초 _ 배열  (0) 2021.12.29
자바 기초 _ [토픽1] 자바 왕기초 _ 조건문과 반복문  (0) 2021.12.29
    '~2023.02/Java' 카테고리의 다른 글
    • [자바의 정석] 지네릭스(Generics)
    • 자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 설계하기
    • 자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 만들기
    • 자바 기초 _ [토픽1] 자바 왕기초 _ 배열
    yooniiverse
    yooniiverse

    티스토리툴바