카페인 중독자
Projects
microservice project
개발환경이슈
개요
example
week1
week2
Tutorial
Github tutorial
Templete tutorial
comment system
markdown guide
posting guide
visitor counter
cs-note
Abstract
쉬운코드
Web
개요
API
State
Transfer_Resource
dev-log
Home
tech-review
AI
BE
nginx
Communicate
Git
Contact
Copyright © 2024 |
Yankos
Home
>
cs-note
>
Abstract
> 쉬운코드
Now Loading ...
쉬운코드
프로그래밍의 기본 요소 설명
개요 출처: 쉬운코드 영상 객체와 클래스 객체와 클래스 객체란? => 상태가 있고 행동을 하는 실체 클래스란? => 객체의 관점에서의 클래스는, 객체가 어떠한 속성이 있고 어떠한 행동을 하는지를 기술한 설계도이다. // example1 class Car { private String name; private double speed; private Size size; ... public void start() { ... } public void stop() { ... } ... } Car myCar = new Car("니로"); Car yourCar = new Car("소나타"); Car ourCar = new Car("스포티지"); Class Car는 Car라는 객체들이 어떠한 상태(name, speed, size)를 가질 수 있고, 어떠한 행동을 할 수 있는지를 설명한다. 또한 이런 Class로 myCar, yourCar, outCar 각 객체는 선언되며, 속성은 모두 동일하지만 각 객체가 가질 수 있는 상태는 모두 다를 수 있다! // example2 class Counter { private int count = 0; public void increment() { count++; } public int get() { return count; } } Counter appleCounter = new Counter(); Counter orangeCounter = new Counter(); 카운터는 어떤 것을 세는 것을 정의한 클래스 내부적으로 count(개수라는 상태), 카운트를 증가시키는 행동, 숫자를 센 값을 가져오는 행동을 기술 instantiate란? new라는 키워드처럼 객체화시켜서 만든 객체(object)를 instance라고 말한다. // example3 class Switch { private int state = 0; public void on() { this.state = 1; } public void off() { this.state = 0; } public boolean isOn() { return this.state == 1; } } Switch tvSwitch = new Switch(); 내가 원하는 속성, 행동을 구체적으로 기술하고 이를 실체화한 것이 객체이다. 이러한 클래스와 객체의 개념은 현실세계를 효율적으로 프로그래밍으로 옮길 수 있게 된다. 코드의 재사용성과 확장성 클래스를 만들면 반복해서 객체를 생성할 수 있음 -> 생산성과 유지보수 용이 데이터와 행동을 함께 묶음 클래스는 속성(데이터)과 기능(메서드)를 하나로 묶음으로써 큰 시스템을 설계할 떄 클래스 단위로 나누면 역할 분담이 쉽다. 객체 지향 프로그래밍(OOP)의 기반 OOP는 캡슐화, 상속, 다형성을 통해 유연하고 강력한 프로그램을 만듦 클래스와 객체가 없다면 이러한 구조적 설계가 불가능 변수와 값 변수란 값을 담을 수 있는 이름이 있는 그릇! 변수는 어떠한 객체가 있는 주소나, 실제 값이 담긴다. ex) 1, “안녕”, Object(“곡괭이”) 변수는 값이 바뀔 수 있다. 클린코드를 위해서는 변수를 꼭꼭꼭 모르는 사람이 봐도 이해하기 쉽게 적자! 함수 아래에 2개 중 무엇이 함수인가? class Add: def add(a, b): return a + b vs def add(a, b): return a + b 함수란? 독립적으로 존재하며 임무(task)를 수행하는 코드들의 집합 함수 이름으로 호출한다. 매개변수를 받을 수도 않을 수도 있다. 결과 값을 리턴할 수도 안할 수도 있다 재사용이 가능하다 매서드란? 객체 혹은 클래스에 종속되어 임무를 수행하는 코드들의 집합 클래스나 객체의 상태 정보에 접근 가능 매소드는 객체의 상태에 영향을 받기에, 같은 클래스로 선언된 메소드더라도, 객체 혹은 클래스에 종속되어 임무를 수행한다! 그래서 질문에 대한 대답은, 객체의 상태에 영향을 받는 클래스의 add는 메소드, 그냥 add는 함수이다! 변수와 객체는 메모리에 어떻게 저장되는가? 어플리케이션은 어떻게 실행되는가? 어플리케이션은 일반 사용자가 사용할 기능을 제공하는 컴퓨터가 실행할 수 있는 명령어들의 집합 메모리는 실행된 애플리케이션이 상주하는 곳 => 어플리케이션이 메모리에 있어야 실행이 가능하다. public class Main { public static void main(String[] args){ int a = 7; int b = 3; int c = a + b; } } a = 7이라는 명령을 cpu에서 실행하고, 이를 메모리에 7이란 값을 올리고, 그 곳에 a라는 이름을 붙임 b = 3이라는 명령을 cpu에서 실행하고, 이를 메모리에 3이란 값을 올리고, 그 곳에 a라는 이름을 붙임 … 이런 식의 명령과 저장이 계속되는 것. runtime => application이 메모리에 올려져서 실행되고 있는 순간을 말한다. 사실, 이런 변수와 변수의 연산과정만이 아닌, 함수도 메모리에 저장된다. 메모리 구조 애플리케이션에 할당되는 메모리는 stack 메모리와 heap 메모리 등의 여러 영역으로 나눠진다. | 메모리 영역 | 역할 | 주의 점| | -------- | --------- | --------- | | Stack | 함수나 메서드의 지역 변수와 매개 변수가 저장되는 곳, 함수나 메서도가 호출될 때도 스택 프레임이 쌓인다. | 스택 프레임은 개발자가 이를 신경 쓸 필요는 보통 없지만, 함수를 재귀적으로 많이 호출하여 스택 메모리 이상을 저장하게 되면 문제가 발생한다.| | Heap | 객체가 저장되는 공간 | |  // example public class Main { public static void main(String[] args) { // 매개변수 Counter c = new Counter(); // 객체, 지역 변수 } } public class Counter { private int state = 0; //상태를 나타내는 instance 변수 public void increment() { state++; } public int get() { return state; } } 3가지 변수가 존재! 객체가 클래스로 부터 생성될 때 생성자가 실행되는 스택프레임이 먼저 생성되고, 이것이 힙에 객체를 생성한 후, 스택프레임이 사라진다. 이때 생성자 스택 프레임에서 this라는 보이지 않는 변수가 힙 주소를 저장하였다가 반환한다. 그리고 해당 stack의 지역변수로 객체가 선언되었으므로, 스택 프레임에 방금 생성된 객체의 heap 주소가 저장된다. 매서드 역시도 stackframe을 통해 생성되며, 매서드는 객체에 종속되어있는데 이 정보가 this를 통해 어떤 객체를 가리키도록 생성된다. 호출된 함수나 매서드는 파라매터로 해당 객체의 주소를 전달받아 상태를 변경시키면, 해당 함수나 매서드가 종료되어 스택메모리에서 사라지더라도 변화된 정보는 힙 메모리에서 유지된다. 쓰레기 객체(garbage object) public class Main { public static void main(String[] args) { Counter c = make(); } public static Counter make() { Counter c = new Counter(); // => 새로운 객체를 heap에 생성 그러나 이를 전달해주지 않고 return new Counter(); // => 새로운 객체를 heap에 생성해 전달 } } public class Counter { private int state = 0; public void increment() { state++; } public int get() { return state; } } 위의 예시처럼 접근할 수 없는 객체가 생겨버리면, 쓸모없는 객체가 heap 메모리를 차지하게 된다. 이런 객체를 쓰레기 객체라고 한다. 이런 것을 삭제해주기 위해 2가지 방법이 있다. 개발자가 직접 해당 객체를 지정해 메모리를 해제 gc(garbage collector)를 지원하는 언어에서 이러한 객체를 자동으로 삭제 파이썬은 모든 것이 객체이기 때문에 def wow(num): print(num) a = 1 wow(a) 파이썬은 모든 것을 객체로 저장하기 위해 스택에 올릴 때 글로벌 프레임을 사용한다.
cs-note
· 2025-07-21
<
>
Touch background to close