(끝까지 읽어보서야 합니다)
쩝.. 아우.. 내가 제대로 알고 있는게 무엇인지.. ㅜㅡ
인스턴스 변수(instance variable)
루비나 레일스에서 흔히 사용하는 개별 객체(클래스 인스턴스)에 종속되는 변수이다.
루비보다는 레일스에서는 controller와 view의 데이터 전달을
이 인스턴스 변수로 하기 때문에 그 활용도가 엄청나게 높다.
-- controller
class zeousController
def index
@name = 'zeous'
end
end
-- view
<%= @name %>
이 정도까지는 레일스 프로그래밍을 해본 사람이라고 하면 그냥 알수 있는 부분이었고
내가 어제까지 알고 있는 내용이었다.
오늘 새롭게 안 내용은
-- controller
class zeousController
def index
@name ='zeous'
print_name
end
def print_name
puts @name
end
end
-- view
<%= @name %>
이렇게 하면 print_name에서 zeous가 제대로 찍힌다는 것이다!!!!
정의를 다시 생각해보자.. 개별 객체에 종속이 되는 변수...
이렇게 동작하는 것과 정의가 일맥상통하는데.. 난 왜 몰랐을까.. ㅠㅜ
rails에서는 1개의 request에 대해서 thread 형태로 서버에서 동작할테고
아마도 controller를 new해서 쓸테니깐.. 그 안에서는 모두 공유가 가능해지는 형태가 되는것이다.
view에서는 루비에서 다른 클래스의 인스턴스 변수를 참조하는 방법을 바탕으로 접근하는 형태일것이다..
흠.. 원인과 결과, 시작과 끝이 명쾌하게 연결이 되는데.. 왜 그동안은 이렇게 생각을 못한것이지.. ㅠㅜ
에효.. 니가 아는게 머냐.. ㅠㅜ
=========================================================================================================
트랙백에서 허진영님이 알려주신 것을 바탕으로.. 다시 한번 생각, 정리, 찾아보기, 공부를 한 반성문입니다.
결론은 자바이건, 루비이건.. 제가 제대로 알고 있었던것이 한~개도 없었다는 생각이 들면서 참 쪽팔리지만
그래도 이렇게 반성문이라도 써야 할것 같아서 다시 글을 씁니다.
1. rails는 싱글 스레드입니다.
그냥 아무생각 없이 당연히 멀티이겠지.. 라는 생각으로 들어갔는데.. 아니네요..
회사에서 실서비스하고 있는 몇개의 시스템도 다시 생각해보니 lighttp나 fcgi를 통해서 3~5개를 띄워놓고 하고 있습니다.
그 이유가 레일스가 단일스레드의 형태이기때문에 이러한 형태로 운영하고 있었습니다.
2. 자바이건 루비이건 변수종류는 동일하다.
루비에 대해서 이상하다고 느낀것이 자바쪽에서는 이런 것이 없었다라고 생각해서 그렇게 느낀것이었습니다.
자바쪽을 살펴보니..아니었네요.. 자바이건 루비이건 동일한 형태이고.. 이름도 같았네요..
루비
class BaboZeous
@@zeous1 = '1' : 클래스변수
KINGORI = 10 : 상수
def beBabo
@zeous2 = '2' : 인스턴스변수
zeous3 = 3 : 지역변수
end
end
자바
public class BaboZeous
{
private String zeous2 = "2"; : 인스턴스변수
public static String zeous1 = "1"; : 클래스변수
public static final int KINGORI = 10 : 상수
public void beBabo()
{
int zeous3 = 3; : 지역변수
}
}
루비는 동적인 언어이기때문에 인스턴스변수의 선언 위치가 자유롭다. 하지만 변수의 생명주기는 자바와 동일하다.
3. 창피하다.
가장 기초중의 기초이면서 상식으로 알아야 하는 변수 선언과 생명주기를 엉터리로 생각하고 있었다니..
물론 추석 연휴 다음날이라 아무 생각 없었다라고 하기에는 너무 바보 같았습니다.. 앞으로 공부 열심히 하겠습니다. ㅠ
이 글과 관련있는 글을 자동검색한 결과입니다 [?]