[F-Lab 모각코 챌린지 3일차] TIL

JeongheeKim·2023년 6월 3일

TIL

목록 보기
3/66

학습계획


  • 자바의 신 3장 정리 및 연습문제 풀기
  • JVM-Stack영역

Today I Learned


3장 정리 및 연습문제

  • 클래스는 상태와 행위가 있어야한다.
  • 매개변수가 없는 기본 생성자는 만들지않아도 된다. 컴파일 시 기본 생성자가 없으면 자동으로 생성해 준다.
  • 클래스 자체만으로 일을 할 수 없고, 객체를 생성해야만 객체가 가진 행위를 할 수 있다. 자바에서는 new예약어를 통해 객체를 생성한다.
    Car car = new Car();

직접해봅시다.

public Class Profile {
	String name;
	int age;
	public static void main(String args[]) {
		
	}
}
public void setName(String str) {
	name = str;
}
public void setAge(int val) {
	age = val;
}
public Class Profile {
	String name;
	int age;
	
	public void printName() {
		System.out.println(name);
	}
}
public Class Profile {
	String name;
	int age;
	
	public void printName() {
		System.out.println(name);
	}
	public void printAge() {
		System.out.println(age);
	}
}
  1. main 메서드에서 Profile 객체 선언

    public Class Profile {
    	public static void main(String[] args) {
    		Profile profile = new Profile();
    	} 
    }
  1. setName메서드를 사용하여 “Min”값을 넘기고, setAge()사용하여 20값을 넘기자

    public class Profile {
    	String name;
    	int age;
    
    	public void printName() {
    		System.out.println(name);
    	}
    
    	public void printAge() {
    		System.out.println(age);
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public static void main(String[] args) {
    		Profile profile = new Profile();
    		profile.setName("Min");
    		profile.setAge(20);
    	}
    }
  2. printAge(), printName메서드를 통해 “My name is Min”, “My age is 20”을 출력하자

    public class Profile {
    	String name;
    	int age;
    
    	public void printName() {
    		System.out.println("My name is " + name);
    	}
    
    	public void printAge() {
    		System.out.println("My age is " + age);
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    	public static void main(String[] args) {
    		Profile profile = new Profile();
    		profile.setName("Min");
    		profile.setAge(20);
    		profile.printName();
    		profile.printAge();
    	}
    }

정리해봅시다.

  • 클래스와 객체의 차이점을 말해 주세요.
    public Class Car {
    	int speed;
    	int distance;
    	String color;
    
    	public Car() {}
    }
    Car tesla = new Car();
    Car kia = new Car();
    Car이라는 클래스를 통해 tesla, kia 객체를 생성했다. 클래스는 여러 객체의 공통된 특성을 모아놓은 틀이다. 또한 클래스를 통해 객체를 생성해야만 클래스에 정의한 행위나 상태를 변경하거나 수행할 수 있다.
  • 객체를 생성하기 위해서 꼭 사용해야 하는 예약어는 뭐라고 했죠? new 예약어를 사용하여 객체를 생성한다.
  • 객체를 생성하기 위해서 사용하는 메소드 같이 생긴 클래스 이름에 소괄호가 있는 것을 뭐라고 하나요? 기본 생성자
  • 객체의 메소드를 사용하려면 어떤 기호를 객체이름과 메소드 이름 사이에 넣어주어야 하나요? 객체 이름 + 점 + 메서드 명을 넣어줘야한다.
    public Class Car {
    	int speed;
    	int distance;
    	String color;
    
    	public Car() {}
    	public void speedUp() {
    		speed ++;
    	}
    }
    Car kia = new Car();
    kia.speedUp();
  • 여러분들이 메소드를 사용하기 위해서는 어떤 것을 만들어야 하나요? 클래스 내부에 메소드를 생성하고 메서드 내부에서 행위를 정의해아한다.
    public void speedUp() {
    		speed ++;
    	}
  • 5번 문제에서 만들어야 하는 것은 어떤 예약어를 사용하고, 클래스의 무엇을 사용해야 하나요? new연산자를 이용하여 객체를 생성한다. 클래스의 참조변수를 이용하여 메서드 명을 호출해야한다.

JVM 메모리 공간

  • Stack
    • 메소드 호출
      • 메소드를 호출하면 메소드는 호출스택(call stack)맨 위에 쌓인다. → stack의 자료구조를 생각하면 쉽다. First In Last Out
      • 스택 맨위에있는 메소드는 현재 실행중인 메소드이다.
      • 실제 스택에 들어가는것은 스택프레임으로서,모든 지역 변수의 값과 메소드의 상태가 들어있다.
    • 지역변수
      • 메소드 내에서 선언한 변수

      • 메소드의 매개변수도 포함

      • 지역변수는 임시 변수로서, 메소드가 스택에 들어있는 동안만 유효하다.

      • 아래 예제에서 지역변수는 x, i, b

        public void foo (int x) {
        	int i = x + 3;
        	boolean b = true;
        }
      • 인스턴스 변수

        • 메서드 내에서 선언된 지역변수를 제외한 클래스 내에서 선언한 변수

0개의 댓글