
자바에서는 printf로 %05d 등을 활용했는데
코틀린에서는 printf가 없어서 printf대신 .format()을 활용함
format : 출력 서식을 이용하여 문자열을 만들 수 있다.
정수 : %d, 실수 : %f, 문자열 : %s, 문자 : %c
%숫자d, %숫자s : 숫자만큼 자리를 확보한 다음 우측 정렬로 출력한다. 비어있는 공간은 공백으로 채워준다.
%.숫자f : 소수점 이하의 값을 숫자만큼만 표시한다.
%0숫자d : 숫자 만큼 자리를 확보한 다음 우측 정렬로 출력한다. 비어있는 공간은 0으로 채워준다.
val a1 = "%2d일차 : %8s%8s%8d원".format(1, "","", 100)
println(a1)
1일차 : 100원
안드로이드에서는 콘솔기반프로그래밍이 아니기때문에 안씀
fun main() {
// break
for(v1 in 1..10){
if(v1 > 5){
break
}
println("v1 : $v1")
}
println()
//continue
for(v2 in 1..10){
if(v2 % 2 == 0){
continue
}
println("v2 : $v2")
}
}
v1 : 1
v1 : 2
v1 : 3
v1 : 4
v1 : 5
v2 : 1
v2 : 3
v2 : 5
v2 : 7
v2 : 9
1970년대 초 os를 만들기 위해 -> C언어 탄생
C언어는 절차지향적 언어(코드가 위에서 아래로 흘러감)
관점지향, ~지향 모두 기존의 객체지향에서 조금 더 붙여 쉽고 편하게 사용할 수 있도록 확장한 개념임
클래스 다이어그램 : 클래스가 어떤 구조인지 표현
// 클래스를 정의한다.
// class 클래스이름
class TestClass1{
}
// 코틀린에서는 클래스 내부에 코드가 없다면 { } 생략이 가능하다.
class TestClass2
fun main() {
// 객체를 생성한다.
// 객체가 생성되면 생성된 객체는 메모리에 자리를 잡는다.
// 생성된 객체를 출력하면
// 클래스이름@객체의일련번호 형태로 출력된다.
println(TestClass1())
// 객체가 생성되면 객체를 구분하기 위한 일련번호(흔히 객체의 주소값이라고 부른다)
// 이 객체의 주소값은 모든 객체에게 다르게 부여된다.
// 객체는 객체의 주소값을 가지고 객체를 구분하고 지칭할 수 있다.
// 객체를 생성하게 되면 이 객체의 주소값이 반환되고 이를 변수에 담아 두었다가
// 객체를 사용하고자 할 때 객체의 주소값을 가지고 있는 변수를 통해 객체에 접근할 수 있다.
val obj1:TestClass1 = TestClass1()
println("obj1 : $obj1")
val obj2 = TestClass2()
}
TestClass1@6af10854
obj1 : TestClass1@7643f2ba
obj2 : TestClass2@31dc3367
class TestClass3{
// 멤버 변수
var a1 = 0
var a2 = 0
// 멤버 메서드
fun testMethod1(){
println("testMethod1")
}
fun testMethod2(){
println("testMethod2")
}
}
fun main() {
val obj3 = TestClass3()
// 객체가 가지고 있는 멤버 변수나 멤버 메서드를 사용하려면
// . 연산자를 사용한다.
obj3.a1 = 100
obj3.a2 = 200
println("obj3.a1 : ${obj3.a1}")
println("obj3.a2 : ${obj3.a2}")
obj3.testMethod1()
obj3.testMethod2()
}
obj3.a1 : 100
obj3.a2 : 200
testMethod1
testMethod2
절차지향 프로그래밍에서 객체지향 프로그래밍은 아래와 같이 바뀐다.
step1) 출력 화면을 구현한다.
출력화면 구현시 필요한 데이터는 임의의 데이터로 설정해준다.
step2) 프로그램에서 필요한 기능들을 정리한다.
step3) step3에서 정리한 기능들을 그룹으로 묶어 준다.
step4) 출력 화면과 step2, step3에서 정의한 기능을 보고 필요한 데이터를 정리한다.
필요할 데이터 : 화면을 구성하기 위해 필요한 데이터, 입력받는 데이터, 발생되는 데이터, 계산되는 데이터 등등
step5) step4에서 정리한 변수들을 그룹으로 묶어 준다.
step6) 클래스를 정의한다.
클래스 내부에 변수를 작성해주고 메서드를 작성해준다.
메서드의 코드는 아직 작성하지 않는다.
step7) 메서드 내부의 코드를 작성하고 이를 테스트 한다.
step8) main에서 필요한 만큼 객체를 생성하고 메서드를 호출하여 프로그램을 완성한다.
주의!!! main에서는 절대로 객체가 관리하는 변수에 직접 접근하지 마세요
출력 화면을 구현한다.
출력화면 구현시 필요한 데이터는 임의의 데이터로 설정해준다.
// 출력 화면 - 테스트용으로 나중에 지우기
fun printResult(){
println("이름 : 홍길동")
println("국어 : 100점")
println("영어 : 90점")
println("수학 : 80점")
println()
println("이름 : 홍길동")
println("국어 : 100점")
println("영어 : 90점")
println("수학 : 80점")
println()
println("이름 : 홍길동")
println("국어 : 100점")
println("영어 : 90점")
println("수학 : 80점")
println()
println("국어 총점 : 300점")
println("영어 총점 : 270점")
println("수학 총점 : 240점")
println("국어 평균 : 100점")
println("영어 평균 : 90점")
println("수학 평균 : 80점")
}
printResult()
프로그램에서 필요한 기능들을 정리한다.
1. 학생의 이름을 입력받는 기능
2. 점수를 입력받는 기능
3. 평균을 구하는 기능
4. 총점을 계산하는 기능
5. 출력하는 기능
step2에서 정리한 기능들을 그룹으로 묶어준다.
1. 학생의 정보를 입력받는 기능 -> 학생
2. 평균을 구하는 기능 -> 학생들
3. 총점을 계산하는 기능 -> 학생들
4. 각 학생의 정보를 출력하는 기능 -> 학생
5. 학생들의 과목별 총점과 평균을 구하는 기능 -> 학생들
출력 화면과 step2, step3에서 정의한 기능을 보고 필요한 데이터를 정리한다.
필요할 데이터 : 화면을 구성하기 위해 필요한 데이터, 입력받는 데이터, 발생되는 데이터, 계산되는 데이터 등등
step4에서 정리한 변수들을 그룹으로 묶어 준다.
클래스를 정의한다.
클래스 내부에 변수를 작성해주고 메서드를 작성해준다.
메서드의 코드는 아직 작성하지 않는다.
// 학생 클래스
class StudentClass{
var name = ""
var kor = 0
var eng = 0
var math = 0
}
// 학생들을 관리하는 클래스
class StudentManagerClass{
var korTotal = 0
var engTotal = 0
var mathTotal = 0
var korAvg = 0
var engAvg = 0
var mathAvg = 0
// 학생 객체의 주소값을 담을 변수, 나중에 매개변수로 학생 객체를 받는 방법 공부할 예정
var s1 = StudentClass()
var s2 = StudentClass()
var s3 = StudentClass()
}
메서드 내부의 코드를 작성하고 이를 테스트한다.
// 학생 클래스
class StudentClass{
var name = ""
var kor = 0
var eng = 0
var math = 0
// 학생의 정보를 입력받는 메서드
fun inputStudentInfo(scanner:Scanner){
print("이름 : ")
name = scanner.next()
print("국어 : ")
kor = scanner.nextInt()
print("영어 : ")
eng = scanner.nextInt()
print("수학 : ")
math = scanner.nextInt()
}
// 학생의 정보를 출력하는 메서드
fun printStudentInfo(){
println("이름 : $name")
println("국어 점수 : $kor")
println("영어 점수 : $eng")
println("수학 점수 : $math")
println()
}
}
// 학생들을 관리하는 클래스
class StudentManagerClass{
var korTotal = 0
var engTotal = 0
var mathTotal = 0
var korAvg = 0
var engAvg = 0
var mathAvg = 0
// 학생 객체의 주소값을 담을 변수
var s1 = StudentClass()
var s2 = StudentClass()
var s3 = StudentClass()
// 각 학생들의 정보를 입력받기 위한 메서드
fun inputStudentInfo(){
val scanner = Scanner(System.`in`)
s1.inputStudentInfo(scanner)
s2.inputStudentInfo(scanner)
s3.inputStudentInfo(scanner)
}
// 각 학생들의 정보를 출력하는 메서드
fun printStudentInfo(){
s1.printStudentInfo()
s2.printStudentInfo()
s3.printStudentInfo()
}
// 과목별 평균을 구하는 메서드
fun getAvg(){
korAvg = (s1.kor + s2.kor + s3.kor) / 3
engAvg = (s1.eng + s2.eng + s3.eng) / 3
mathAvg = (s1.math + s2.math + s3.math) / 3
}
// 과목별 총점을 구하는 메서드
fun getTotal(){
korTotal = s1.kor + s2.kor + s3.kor
engTotal = s1.eng + s2.eng + s3.eng
mathTotal = s1.math + s2.math + s3.math
}
// 과목별 총점과 평균을 출력하는 메서드
fun printResult(){
println("국어 총점 : $korTotal")
println("영어 총점 : $engTotal")
println("수학 총점 : $mathTotal")
println("국어 평균 : $korAvg")
println("영어 평균 : $engAvg")
println("수학 평균 : $mathAvg")
}
}
fun main() {
// Student 클래스의 inputStudentInfo 테스트
val scanner = Scanner(System.`in`)
val s1 = StudentClass()
s1.inputStudentInfo(scanner)
println(s1.name)
println(s1.kor)
println(s1.eng)
println(s1.math)
// Student 클래스의 printStudentInfo 테스트
val s1 = StudentClass()
s1.name = "홍길동"
s1.kor = 100
s1.eng = 90
s1.math = 80
s1.printStudentInfo()
// StudentManagerClass의 getAvg 메서드 테스트
val manager1 = StudentManagerClass()
manager1.getAvg()
println(manager1.korAvg)
println(manager1.engAvg)
println(manager1.mathAvg)
// StudentManagerClass의 getTotal 메서드 테스트
val manager1 = StudentManagerClass()
manager1.getTotal()
println(manager1.korTotal)
println(manager1.engTotal)
println(manager1.mathTotal)
// StudentManagerClass의 printResult 메서드 테스트
val manager1 = StudentManagerClass()
manager1.printResult()
}
main에서 필요한 만큼 객체를 생성하고 메서드를 호출하여 프로그램을 완성한다.
fun main() {
// 학생 관리 요소의 객체를 생성한다.
val studentManagerClass = StudentManagerClass()
// 학생 정보를 입력받는다.
studentManagerClass.inputStudentInfo()
// 각 과목별 총점을 구한다.
studentManagerClass.getTotal()
// 각 과목별 평균을 구한다.
studentManagerClass.getAvg()
// 각 학생별 정보를 출력한다.
studentManagerClass.printResult()
}
// 입력
이름 : 학생1
국어 : 10
영어 : 20
수학 : 30
이름 : 학생2
국어 : 20
영어 : 30
수학 : 40
이름 : 학생3
국어 : 30
영어 : 40
수학 : 50
// 출력
국어 총점 : 60
영어 총점 : 90
수학 총점 : 120
국어 평균 : 20
영어 평균 : 30
수학 평균 : 40
※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스