2022.09.19 JAVA-3

차유빈·2022년 9월 19일
0

JAVA

목록 보기
3/13

For Each문

  • for (데이터 타입 + 변수 이름 일부 : 변수 이름) { 명령문 };
    예시 : for (String s : fruits ) { }
    과일 배열 안에 있는 한개의 배열이라는 뜻
    데이터 하나는 불러오지만 그 데이터의 인덱스 번호까진 가져올 수 없음
package application;

public class ForEach {

	public static void main(String[] args) {
		// 배열의 for each 반복문
		String[] fruits = {"바나나", "사과", "수박"};
		
		for(int i = 0; i < fruits.length; i++) {
			System.out.println(fruits[i]);
		}
		
		//for each => (하나의 아이템 : 배열)
		for (String s : fruits ) {
			System.out.println(s);
		}
	}
}


참조변수 (New null)

  • new : 기본 타입 아닌 것들은(참조 자료형, 참조 변수) 새로운 메모리 공간에 새로운 배열 또는 문자열 객체를 만듬
package application;

public class StringArray2 {

	public static void main(String[] args) {
		// 문자열은 클래스타입 => 참조변수 (주소를 가짐)
		int x = 10; //기본 타입
		String s = "문자열"; 
		System.out.println(s);
		/* 참조 타입(문자열은 몇 byte를 쓸지 데이터 크기를 알 수 없기에 
		   공간을 정할 수가 없으므로 주소값을 부여함) */
		int [] arr = { 1,2,3,4,5,6,7 }; // new Int[7];
		String text = new String("헬로우");
		// null은 주소가 없다는 뜻
		s = null;
		arr = null;
		
		String[] texts = null; //실제 배열은 만들어지지 않음
		System.out.println(texts);
		texts = new String[3]; //문자열 배열(3) 생성하여 texts에 주소 값 넣어줌
		System.out.println(texts);
		
		texts[0] = new String("하이");
		texts[1] = new String("Hi");
		texts[2] = new String("Hello");
		System.out.println(texts[0]);
		System.out.println(texts[1]);
		System.out.println(texts[2]);
		
		for (String word : texts) {  // word는 각각의 데이터를 가르킴
			System.out.println(word);
		}
	}
}


MultiArray (이중배열)

  • 배열 안에 배열이 있음
package application;

public class MultiArray {

	public static void main(String[] args) {
		// 이중배열
		String[][] texts = { 
				{ "하나", "둘", "셋" }, 
				{ "넷", "다섯", "여섯" }, 
				{ "일곱", "여덟", "아홉" } }; 
		// 배열 안에 3개의 배열이 들어 있음

		// 이중배열의 길이 => 안에 있는 배열의 개수
		for (int i = 0; i < texts.length; i++) {
			/* System.out.println(texts[i]);
			 => 이중배열의 첫번째,두번째,세번째 주소가 출력됨 */
			
			for (int j = 0; j < texts.length; j++) {
				System.out.printf("%s\t", texts[i][j]);
			}			
			System.out.println(); //줄바꿈 하려고 넣은것
		}
	}
}


이중 배열 예제

package application;

public class MultiArray2 {

	public static void main(String[] args) {
		// 이중배열
		int[][] numbers = { 
				{ 1,5,7 }, 
				{ 9,6,3 }, 
				{ 2,4,6 }
				};
		
		int total = 0;

		for (int i = 0; i < numbers.length; i++) {
			
			for (int j = 0; j < numbers.length; j++) {
				total = total + numbers[i][j];
			}
		}
		System.out.println("총합은 : " + total);
	}
}

-----------------------------------------------------------------------------------------------------------------------------------

CH06_클래스와 메소드

클래스와 객체

  • 한 개의 클래스 파일에 여러개의 클래스 생성 가능(단, 파일 이름과 같은 클래스는 하나여야함)
  • 패키지 내에 여러 클래스 생성 후 클래스 프로그램 실행을 위한 main 메소드는 하나만
  • 클래스 : 객체를 만들기 위한 설계도
    객체 : instance라고도 함. 클래스로 객체를 만드는 것을 '인스턴스화'라고 함
package app;

/* 한 개의 파일에 여러개의 클래스 생성 가능 (파일 이름과 같은 클래스는 단 하나여야함) */
class Person { //인스턴스 변수(객체 변수 : 자체사용불가, 즉 객체로 생성해야 사용가능)
	String name; //이름 변수
	int age; //나이 변수
}

public class ClassObject {

	public static void main(String[] args) {
		// 쿨래스는 설계도로 실제 사용 가능한 객체를 생성
		Person p1 = new Person(); 
		/* new 키워드로 메모리에 Person 객체를 생성해줌 
		   Person 클래스(설계도)의 변수 p1에 주소가 저장됨 */
		p1.name = "펭수"; //p1 주소에 name 이라는 변수가 있음
		p1.age = 10;
		Person p2 = new Person(); 
		p2.name = "고양이"; //p2 주소에 name 이라는 변수가 있음
		p2.age = 20;
		// 클래스는 설계도, 객체는 찍어낼 수?있음
		
		System.out.println(p1);
		System.out.println(p2);
		System.out.println(p1.name);
		System.out.println(p1.age);
		System.out.println(p2.name);
		System.out.println(p2.age);
	}
}


예제


메소드 리턴


매개변수(파라미터)

package 매개변수;

public class App {

	public static void main(String[] args) {
		Calculator calc = new Calculator();
		
		int num = 9;
		int result = calc.square(num);
		System.out.printf("%d의 제곱은 %d 이다.\n", num, result);

		result = calc.plus(15, 5);
		System.out.printf("입력된 두 수의 합은 %d 이다.\n", result);
		
		result = calc.minus(20, 10);
		System.out.printf("입력된 두 수의 차는 %d 이다.\n", result);
	}
}


Gatters and Setters 메소드

  • 클래스 안의 인스턴스 변수에 접근하는 메소드
  • 다른 클래스에서 중요 클래스 변수의 값을 볼 수 없도록 Private 처리(절대 접근 불가는 아니고 필터링)
  • Private : 다른 클래스에서 접근 불가
    Public : 다른 클래스에서 사용 가능
  • get, set 메소드를 사용해서 private 처리된 클래스에 접근할 수 있음


window 창 클래스 작성

  • 자동 완성(Generate Getting and Setting)으로 생성 가능


생성자 Constructor

  • 클래스의 특별한 메소드로 객체를 생성

toString 메소드

  • 객체의 정보를 리턴하는 역할
  • toString 메소드는 데이터 주소가 아닌 객체의 데이터 값을 불러옴
  • 자바 라이브러리나 유저가 만든 모든 클래스는 "Object" 클래스를 부모클래스로 상속 받아서 사용 하게 됨 => toString 메소드는 object 메소드 중 하나임


총 정리(변수, 생성자, getter 및 setter, toString 자동 완성 하기)

package school;

// 1. 변수 입력
public class Student {
	private String name;
	private int age;
	private boolean isvisible; // 출석 true, 결석 false
	private double temperature; // 온도 검사

	// 2. 생성자 모든 매개변수 입력서
	public Student(String name, int age, boolean isvisible, double temperature) {
		this.name = name;
		this.age = age;
		this.isvisible = isvisible;
		this.temperature = temperature;
	}

	// 3. getter and setter
	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public boolean isIsvisible() {
		return isvisible;
	}

	public void setIsvisible(boolean isvisible) {
		this.isvisible = isvisible;
	}

	public double getTemperature() {
		return temperature;
	}

	public void setTemperature(double temperature) {
		this.temperature = temperature;
	}

	//4.toString
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", isvisible=" + isvisible + ", temperature=" + temperature
				+ "]";
	}
}


static 메소드

  • static 메소드는 객체를 만들지 않고 사용 가능함 (클래스명.static메소드명 적으면 됨)
  • static 메서드는 스테틱 변수만 사용 가능
package application;

public class Cat {

		private String name;
		private int id; //고양이 아이디(고유한 값, 중복 불가)
		
		// 클래스명만 가지고 사용 static
		public static final String FOOD = "고양이 사료";
		
		private static int count = 0; //객체와 상관없이 바로 만들어지는 변수
		//스테틱 변수 초기값 0
		
		public Cat(String name) {
			this.name = name;
			count++; //객체 생성시 카운트 1증가!
			id = count; //고양이를 만들때마다 1씩 증가하고 그 값이 id에 들어가면 중복 안됨
			
		}

		/* public int getCount() {
			return count;
		} 카운트를 리턴 */
		
		//스테틱 메서드는 스테틱 변수만 사용 가능
		public static int getCount() {
			return count; //카운트를 리턴
		}
			
		@Override
		public String toString() {
			return "Cat [고양이 ID: " + id + ", 이름 = " + name + "]";
		}	
	}

package application;

public class App {

	public static void main(String[] args) {
	
		//스테틱 상수(변수)는 객체없이 사용
		System.out.println(Cat.FOOD);
		System.out.println(Math.PI);
		
		System.out.println("카운트 : " + Cat.getCount());
		
		Cat c1 = new Cat("베티");
		System.out.println("카운트 : " + Cat.getCount());

		Cat c2 = new Cat("클로이");
		System.out.println("카운트 : " + Cat.getCount()); 
		
		Cat c3 = new Cat("Betty");
		System.out.println("카운트 : " + Cat.getCount()); //c1.getCount해도 증가
		
		
		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		

		sayHi(); 
		//클래스명.스테틱메소드 => App.sayHi() 인데 어차피 App 클래스내라서 생략 가능
	}

	static void sayHi() {
		System.out.println("하이!");
	}
}

profile
chacha's 프로그래밍 공부

0개의 댓글