//////
Search
📓

09/22 조건문, 객체, 클래스, 메소드

생성일
2022/09/22 07:14
태그

조건문 - 임학준

형변환 복습

연산이 일어날때는 데이터 타입이 다르게 되면 한곳에 데이터 타입을 맞춘다.
정수형에 대해서는 int로 리턴을한다.
short num3 = (short)(num1+num2) //int 이하의 범위는 형변환 규칙에 따라 int로 변환되기 때문에 (short)를 넣는다. //이유는 자바 가상머신(JVM)이 32비트이기 때문에 int로 형변환 현상이 일어나게 된다.
Java
복사
long(8byte) → float(4byte)의 경우 byte보다 정수이냐 실수이냐를 판단한다
1. float의 범위는 실수이고 최소값 ~ 최대값이 long를 포함한다
2. long → float는 소수점을 보존할수있다.

switch문 예제 (계절입력)

import java.util.Scanner; public class Hello0922 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("월 입력 : "); int date = sc.nextInt(); switch(date) { case 12: case 1: case 2: System.out.println("겨울"); break; case 3: case 4: case 5: System.out.println('봄'); break; case 6: case 7: case 8: System.out.println("여름"); break; case 9: case 10: case 11: System.out.println("가을"); break; default: System.out.println("잘못된 표현입니다"); } } }
Java
복사
switch문은 기본적으로 정수가 온다. switch(n) ; n = int
break;를 적지 않으면 다음 case가 실행된다.

if문 예제 (가위바위보게임)

import java.util.Scanner; public class 가위바위보게임 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("가위(0), 바위(1), 보(2): "); int user = sc.nextInt(); int computer = (int) (Math.random() * 3); if (user == computer) System.out.println("인간과 컴퓨터가 비겼음"); else if (user == (computer + 1) % 3) // 0은 1한테 지고 1은 2한테, 2는 0한테 진다. System.out.println("인간: " + user + " 컴퓨터: " + computer + " 인간 승리"); else System.out.println("인간: " + user + " 컴퓨터: " + computer + " 컴퓨터 승리"); } }
Java
복사
로직적으로 if문에 if를 들어가게 하는것보다 else if로 바깥으로 빼는것이 좋다
if문에 속한 문장이 하나일 경우 중괄호 생략 가능, 하지만 두줄 이상일 때는 넣어야 한다
조건문에서 else가 있으면 위든 아래든 조건문이 반드시 실행하게 되어있다

객체 - 김기헌

객체(Object)란?

‘객체’는 넓은 의미로 모든 사물을 의미. 핸드폰, 자동차 등 모든 것이 객체이다.
Ex)
객체 → 자동차
속성 → 바퀴, 핸들, 엔진 등등
기능 → 이동수단
프로그래밍에서의 객체: 속성과 기능을 가지는 프로그램 단위
Ex)
객체 → 날씨 예보 프로그램
속성 → 온도, 미세먼지, 습도 등등
기능 → 날씨 예보

객체지향 프로그래밍이란(Object Oriented Programming, OOP)?

문제를 여러개의 객체로 나누어 처리하는 방식을 말한다
장점
코드 재사용의 용이하다
유지보수가 쉽다
대형 프로젝트에 적합하다
단점
처리속도가 상대적으로 느리다
객체가 많으면 용량이 커진다
객체 지향 언어: Java, C# 등등

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

캡슐화
-관련된 필드와 메소드를 하나로 묶고 실제 구현내용을 외부로부터 감추는 기법
-내부 인터페이스와 외부 인터페이스를 구분하는 것
-외부에서는 공개된 메소드를 통해 접근할 수 있다.
상속
아직 배우지 않은 부분
추상화
-객체에서 공통된 속성과 행위를 추출하는 기법
다형성
-같은 이름의 메소드를 호출하더라도 객체아 따라 다르게 동작하는 것
-오버라이딩(Overriding): 상위클래스의 동작을 하위클래스에서 재정의 하는 것 상속에서 배울 예정
-오버로딩(Overloading): 같은 이름의 메서드를 여러개 정의 But, 매개변수의 유형이나 개수가 달라야함
void Lion(){ } void Lion(int age){ } void Lion(String name){ } void Lion(int age, String name){ }
Java
복사

객체 생성

모든 객체는 클래스(Class)로부터 new를 사용하여 생성된다.
Class class = new Class(); //객체 생성 //여기서 class가 레퍼런스이다.
Java
복사
public class MainClass { public static void main(String[] args) { Grandeur myCar1; //레퍼런스 myCar1 = new Grandeur(); //객체 생성 myCar1.color = "red"; myCar1.gear = "auto"; myCar1.price = 100; myCar1.info(); }
Java
복사
public class Grandeur { public String color; public String gear; public int price; public Grandeur() { //생성자 클래스 System.out.println("Grandeur class 생성자"); } public void info{ System.out.println(" -- info() --"); System.out.println("color :" +color); System.out.println("gear :" +gear); System.out.println("price :" +price); } }
Java
복사

객체와 메모리

자료형이 같아도 메모리의 생성이 다른 곳에 되어있다면 엄연히 다른 객체이다
객체는 메모리에서 동적으로 생성되며, 이 객체가 생성된 메모리의 주소 값만 레퍼런스가 가지고 있다.
레퍼런스: 생성한 객체의 주소를 변수에 저장한 것
객체가 필요 없게 되면 레퍼런스에서 연결을 끊어버리고 그 객체는 GC(garbage Collector)가 제거한다.
레퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없다.

클래스 - 김상호, 조국현

객체지향이란?

'실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.' 라는 것.

클래스란?

객체를 생성하기 위한 틀이다.
class 키워드로 정의하고, new 연산자를 통해 인스턴스를 생성한다.
클래스에서 객체를 생성하는 과정을 인스턴스화라고 하며, 생성된 객체를 인스턴스라고 한다.
붕어빵틀 -> 클래스
붕어빵 -> 객체
정의
public class Circle { int radius; String color; double calcArea(){ return 3.14*radius*radius; } }
Java
복사
- 여기서 1행부터 보면 public 을 접근 지정자, class 라는 키워드로 클래스 선언, Circle을 클래스 이름으로 선언한다.
- 클래스 안에서 변수와 메소드를 선언 및 초기화 할 수 있는데, 변수를 필드라고도 부른다. (더 자세히 알아 봐야함)
클래스 정의 후 객체 생성
public class Circle { int radius; String color; double calcArea(){ return 3.14*radius*radius; } } public class CircleTest{ public static void main(String[] args){ Circle obj; //참조 변수 선언 obj = new Circle(); // 객체 생성 obj.radius = 100; obj.color = "blue"; //객체 필드 접근 double area = obj.calcArea(); // 객체 메소드 접근 System.out.println("원의 면적 = " + area); } }
Java
복사
클래스는 객체를 찍어내는 틀
객체는 .class 를 메모리로 올리는 것.
Car car = new Car();
Car[자료형]
car[참조값 저장]
new[메모리 heap 할당 인스턴스 생성, 참조값 리턴 ]
Car (); [생성자 호출]
인스턴스는 객체에 포함된다고 볼 수 있다.

예제 코드

class 연습 { public static void main(String[] args) { Tv t; // Tv인스턴스를 참조하기 위한 변수 t 선언 t = new Tv(); // Tv인스턴스 생성 t.channel = 7; t.channelDown(); // Tv인스턴스의 채널 내리기 메소드 호출 t.channelDown(); t.channelDown(); System.out.println("현재 채널은 " + t.channel + " 입니다."); } } class Tv{ // Tv의 속성 String color; boolean power; int channel; // Tv의 기능(메소드) void power() {power = !power;} void channelUp() {++channel;} void channelDown() {--channel;} }
Plain Text
복사

결과

현재 채널은 4 입니다.
Plain Text
복사

클래스를 쓰는 이유는?

코드를 재사용하기 쉽다. (반복적인 작업)
코드의 관리가 용이하다.
신뢰성이 높은 프로그래밍을 가능하게 한다.
클래스를 만들어놓으면 호출하여 다른 클래스에서 사용할 수 있기 때문에 코드를 다시 정의 하고 값을 지정해주지 않아도 된다. 그저 호출만 하면 된다.

생성자란?

생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메소드'
(필드에 초기값 제공, 초기화 절차를 실행하는 메소드)
인스턴스 변수의 초기화 작업에 사용, 생성시에 실행되어야 할 작업을 위해 사용
주의할점
생성자의 이름은 클래스의 이름과 같아야 한다.
생성자는 리턴 값이 없지만 void를 사용하지 않는다.
생성자는 클래스내에서 선언 가능, 오버 로딩이 가능해 하나의 클래스에 여러 개의 생성자가 존재 가능하다.

생성자 사용법

//생성자 선언 방법 public 클래스명 (매개변수) { .... }
Java
복사
생성자는 객체가 생성될 때 호출된다. (=new 키워드가 사용될 때 호출된다.)

기본 생성자

기본 생성자는 매개 변수가 없는 생성자이다.
객체가 생성될 때 가장 먼저 호출되는 생성자
만약 개발자가 생성자를 정의하지 않으면 자바 컴파일러는 기본 생성자를 자동으로 만든다.
public class Constructor { // public Constructor(){ } // Default Constructor 자동 생성 = 기본 생성자 public static void main(String[] args) { Constructor ce = new Constructor(); // 인스턴스 생성 및 생성자 호출 } }
Java
복사

this 생성자

this는 현재 객체 자신을 가리키는 참조 변수
컴파일러에서 자동으로 생성한다.
클래스의 필드값과 메소드의 변수값이 동일할 때 둘을 구분하기 위한 장치.

예제 코드

String name; void classB(){ String name = "홍길동"; this.name = name; }
Plain Text
복사
this.name은 필드의 String name을 지칭하는 것이다.
메소드 내부의 name과 구별하기 위해 사용한 것이다.
this()
다른 생성자를 의미하며, 다른 생성자를 호출할 때 쓴다.

클래스와 객체 예제 코드

public class ObjectClass { public int x; public int y; //public ObjectClass(){} <--- 생성자를 따로 만들지 않았을 시 실행되는 기본 생성자 // 직접 적어주지 않아도 기본으로 실행된다 public ObjectClass(String s,int[] arr) { System.out.println("--objectClass"); System.out.println("s:"+s); System.out.println("arr:"+arr); } public ObjectClass(int x, int y) { //생성자 오버로딩 this.x=x+10; this.y=y+10; } public void getInfo() { System.out.println("x:"+x); System.out.println("y:"+y); } }
Java
복사
public class MainClass { public static void main(String[] args) { int[] arr= {10,20,30}; ObjectClass obj1= new ObjectClass("hi",arr); ObjectClass obj2= new ObjectClass(10,20); obj2.getInfo(); } }
Java
복사
Java
복사

결과

--objectClass s:hi arr:10 20 x:20 y:30
Plain Text
복사

메소드 - 최아영

메소드는 입력값을 받아서 결과를 도출해 내는 함수와 비슷한 개념이다.
입력값을 매개변수라고 하고 결과값을 반환값이라고 한다.
클래스가 가지고 있는 기능으로 클래스 안에 선언된다.

메소드 선언

매개변수가 여러 개일 경우 콤마(,)로 구분한다.
반환값이 없는 경우 void라고 작성한다.
반환값 앞에 return이라는 키워드를 사용한다.
반환타입은 하나만 사용할 수 있다.
매개변수도 없고 반환값도 없는 형태
접근제한자 void 메소드명(){ 실행문; } }
매개변수만 있는 형태
접근제한자 void 메소드명(매개변수){ 실행문; } }
반환값만 있는 형태
접근제한자 반환타입 메소드명(){ 실행문; return 반환값; } }
매개변수와 반환값 모두 있는 형태
접근제한자 반환타입 메소드명(매개변수){ 실행문; return 반환값; } }

메소드 사용

레퍼런스변수.메소드명(인자);
메소드를 사용하기 위해서는 메소드가 정의된 클래스가 생성되어야 한다.
class Student { String name; int rollno; int age; public void printStudent() { System.out.println("학생의 이름: " + this.name); System.out.println("학생의 이름: " + this.rollno); System.out.println("학생의 이름: " + this.age); } } public class Test { public static void main(String[] args) { Student s = new Student(); s.name = "Kim"; s.rollno = 20180001; s.age = 20; s.printStudent(); } }
Java
복사