클래스와 속성

Eungae's avatar
Dec 15, 2025
클래스와 속성

클래스 (Class)

객체 지향 프로그래밍 (Object-Oriented Programming)의 핵심 개념이자 기본 단위
객체의 구조와 동작을 정의하는 틀
객체: 클래스에서 정의한 구조를 기반으로 생성된 실제 데이터 — 개별적 실체
 
class [클래스 이름] { ... }
class Person { String name; int age; Person(this.name, this.age); void introduce() { print("안녕? 나는 $age$name!") } }
속성: name, age
생성자: Person(this.name, this.age);
매서드: introduce()
 

클래스의 구성

 
클래스 = 여러 속성메서드를 하나로 묶어서 만든 설계도
클래스라는 설계도에 의해 실제로 만들어진, 생성된 결과물 = 객체 = 인스턴스 = 실체
인스턴스가 가진 변수 (인스턴스 변수) = 필드
메서드에서 그 인스턴스를 가리키는 포인터 = this
상속 시 부모 초기화 = super가 담당
 

속성 (Attribute)

클래스 안에서 작업을 수행할 때 사용하는 데이터

인스턴스 변수 (Instance Variable)

객체에 속해있는 변수
객체(Class를 통해서 실제로 생성될 유닛)에 속하는 변수, ‘필드’라고도 함.
this
class Person { String name = "박정민"; // name은 인스턴스 변수. 정확하게는 인스턴스 변수 선언. "박정민"은 인스턴스 변수의 초기값. void rename(String name) { // rename은 인스턴스 메서드. 인자로 받은 name(지역 변수)의 값을 인스턴스 변수 this.name에 대입한다. this.name = name; } } void main() { var p = Person(); // Person 설계도에 따라 인스턴스 하나 만들고 그것을 p에 담는다. p.rename("구교환"); //p에 rename 메서드를 적용하고, 그때 지역 변수의 값은 "구교환"이다. print(p.name); // 인스턴스 p가 갖고 있는 name이라는 필드에 들어있는 값을 출력하라. }
  • 키워드 this를 통해 인스턴스 변수를 호출할 수 있다.
  • this 는 “현재 만들어지고 있는 인스턴스”를 가리킨다. 클래스의 정의를 읽는 시점이 아니라, 객체가 실제로 생성되는 런타임 시점this가 활성화되는 것.
  • 즉, 생성자나 메서드가 호출될 때, “그 순간 만들어진 객체”를 참조하는 포인터.
  • 인스턴스가 생성된 이후 실행되는 메서드 내부에서 사용되는 포인터.
  1. this.name은 메서드를 호출한 객체의 name을 가리킨다.
    1. → this 는 호출하는 객체에 따라 달라지는 “동적 포인터”
  1. name과 this.name은 기본적으로 같다.
    1. → 스코프에 충돌하는 이름이 없으면 동일한 의미
  1. this는 “필드와 지역변수를 구분할 때” 필요하다.
    1. → 이름이 충돌하면 this로 명확히 구분해준다.
 
 
 

지역 변수 (Local Variable)

특정 코드블록 안에 선언된 변수
class fruit { String name = "귤"; void sayName() { String favorite = "제일 좋아하는 겨울의 맛은 $name !"; print(favorite); } }
지역변수 : favorite
인스턴스 변수: name
변수가 선언된 코드 블록 안에서만 사용할 수 있음.
변수가 선언된 코드 블록의 실행이 끝나면 메모리 상에서 사라짐. = 생명주기가 짧다.
 

정적 변수 (Static Variable)

= 클래스 변수
객체에 종속되지 않고 클래스 자체에 속하는 변수
class Circle { static double pi = 3.14; }
  • 클래스 이름을 통해 접근한다.
    • class Circle { static double pi = 3.14; double radius = 0; } void main () { print(Circle.pi); // 3.14 print(Circle.radius); // Error: Member not found: 'radius' }
    • 인스턴스 변수 radius는 클래스 이름으로 접근 불가
    • 정적 변수 pi는 클래스 이름으로 접근 가능
  • 객체를 통해 접근 불가
    • class Circle { static double pi = 3.14; double radius = 0; double pi2 = 2.0; } void main () { Circle circle = Circle(); // 클래스 Circle의 설계도에 따라 인스턴스 하나를 생성하고 그것을 circle이라는 이름에 담는다. print(circle.radius); // 0 -- 인스턴스 circle의 인스턴스 변수인 radius를 호출한다. print(circle.pi); // Error -- 인스턴스인 circle은 `pi`라는 이름의 인스턴스 변수를 갖고 있지 않으므로 호출이 불가함. print(circle.pi2); // 2.0 } print(Circle.pi); // 3.14 -- 클래스 Circle의 정적 변수인 pi를 호출한다.
  • this를 통해 접근 불가
    • this는 객체(인스턴스)를 가리키는 키워드. 정적 변수는 객체에 종속되는 것이 아니므로 this를 통해 접근할 수 없음.
  • 객체마다 개별적인 값을 갖는 것이 아니라, 모든 객체가 서로의 값을 공유함.
    • class Circle { static double pi = 3.14; void printPi() { print(pi); } } void main() { Circle c1 = Circle(); c1.printPi(); // 3.14 Circle c2 = Circle(); c2.printPi(); // 3.14 print(Circle.pi); // 3.14 }
 
 

실습

💡
책의 제목(title)과 저자(author)를 속성으로 가지고 있는 Book 클래스를 만들어보세요. 클래스를 만든 후 객체를 생성하여 제목과 저자를 출력해보세요.
▼ 내가 푼 것
class Book { String title; String author; Book(this.title, this.author); } void main() { Book littlePrince = Book("어린왕자", "생떽쥐베리"); print("제목: ${littlePrince.title}"); print("저자: ${littlePrince.author}"); }
▼ 제시된 예시 코드
class Book { String title = 'Dart 프로그래밍'; String author = '김개발'; } void main() { Book myBook = Book(); print('제목: ${myBook.title}'); // 제목: Dart 프로그래밍 print('저자: ${myBook.author}'); // 저자: 김개발 }
두 코드는 어떤 차이가 있는가?
🔥 “객체마다 값이 달라질 수 있는가?” 네 코드 Book a = Book("어린왕자", "생떽쥐베리"); Book b = Book("해리포터", "롤링"); 👉 완전히 다른 객체 생성 가능 ⭕ 정답 예시 코드 Book a = Book(); Book b = Book(); 👉 둘 다 항상 Dart 프로그래밍 / 김개발 ❌ 그럼 왜 정답 예시는 저렇게 냈을까? 👉 의도는 “클래스 + 객체 생성” 연습 생성자 개념 ❌ 인스턴스 변수 접근 ⭕ . 연산자 연습 ⭕ 그래서 최소 문법만 보여준 예제야.
 
Share article

나새끼메이커