-
[java] 클래스java 2023. 1. 16. 17:08
5-1 객체지향 프로그래밍
객체지향 프로그래밍이 필요한이유는 ?
예를 들어보자, 우리가 만약 계산기 2대가 필요하다면 계산기 클래스 2개를 만들어야 한다.
그런데 계산기가 3대 혹은100대가 필요하다면 일일히 계산기를 만들기란 쉽지않다.
그렇기때문에 같은 기능을 갖고있는 계산기 클래스를 하나만 만들고
객체를 여러개생성하면, 클래스 하나로 100대의 계산기를 구현할 수 있는 것이다.
5-2 클래스
- 클래스는 파일에 단독으로 작성하는 것이 일반적인 방법이다.
- 클래스는 객체를 만드는 기능을 갖고있다.
- new는 객체를 생성할때 사용하는 키워드이다.
- 어떤 클래스를 통해 만들어진 객체를 인스턴스라고 한다.
클래스의 예시) Animal - 클래스로 무수히 많은 동물객체 cat,dog등을 만들 수 있다.
class Animal{ }//Animal클래스 - 객체를 만들 수 있다. public class HelloWorld { public static void main(String[] args){ Animal cat = new Animal();// new는 객체를 생성한다. cat는 Animal의 인스턴스인 객체이다. Animal dog = new Animal(); } }
객체 변수(instance variable)
class Animal{ String name; //클래스 내부에 선언된 변수를 객체 변수(인스턴스 변수, 멤버변수, 속성)라고 한다. } public class HelloWorld { public static void main(String[] args){ Animal cat = new Animal(); System.out.println(cat.name);// 객체변수는 도트 연산자를 통해 접근할수있다 } }
객체 변수에 값을 할당하는 방법
메소드를 이용한다. 메소드는 클래스 내부에 구현된 함수이다.
class Animal{ String name; public void setName(String name) { //리턴값이 없다 setter String형 변수를 입력받아 객체 변수에 값을 할당한다. this.name =name; } } public class HelloWorld { public static void main(String[] args){ Animal cat = new Animal(); cat.setName("body");//도트연산자로 메소드를 호출한다. System.out.println(cat.name); } }
this의 의미
this는 Animal클래스에 의해 생성된 객체를 지칭한다.
위 예에서 this.name이라는 뜻은 cat.setName으로 호출했으므로 this == cat을 가르킨다.
즉 Aniaml클래스에 의해 생성된 cat객체의 name을 의미하는것이다.
객체 변수는 공유되지 않는다. - 객체지향적
만약 객체변수 name이 공유가 된다면, dog.name="happy"라는 문장이 나중에 수행되므로 cat.name값도 happy로 변경되어야할것이다.
그러나 name객체 변수는 공유되지 않는다. 이는 객체 변수의 값을 독립적으로 유지할 수 있고 클래스의 존재이유가 된다.
반대로 static을 사용하게 되면 객체 변수를 공유하게 만들 수 있다.
class Animal{ String name; //name객체 변수는 공유되지 않고 객체마다 단독으로 쓰인다. public void setName(String name) { this.name =name; } } public class HelloWorld { public static void main(String[] args){ Animal cat = new Animal(); cat.setName("body"); Aniaml dog = new Animal(); dog.setName("happy"); System.out.println(cat.name); System.out.println(dog.name); } }
'java' 카테고리의 다른 글
[java] call by value vs call by reference (0) 2023.01.16 [java] 메소드 (0) 2023.01.16 [java] 제어문(if,switch,while,for) (0) 2023.01.16 3장 연습문제 (0) 2023.01.15 [java] 자료형과 형변환 (0) 2023.01.12