In addition to what Malo said.
Cross validation actually solves another problem. We used to split the data into 3 sets. A training set to fit the model, a test set to fine tune the parameters and a validation set for the final test. If you do this split only once then the model learns only with the training set provided. So the learning depends on how you decide to split the dataset. The dataset to learn with gets very small. With cross validation you split the dataset multiple times and you learn and fine tune on every k-fold. With every iteration you might get new information from the dataset and you increase the data you can use for training and fine tuning. In the graph below you can think of the orange test data as validation data.
(from https://scikit-learn.org/stable/modules/cross_validation.html )
If you want to test a pupil you'll make sure that the pupil doesn't have access to the exam answers, right? You want to know if the pupil can perform well on an exam which he/she hasn't seen before. It's the same thing here. If you train and fine tune a model on a dataset you want to make sure that it performs well on a new unseen test set.
Let's stay with the pupil analogy here. Let's assume each row of the matrix in the graph is a week of learning for a final exam. The final exam is the orange test data.
Every week the pupil studies with the study materials (green) and does a training test (blue). The next week the study material changes slightly and the pupil has a new training test (blue). Once all weeks of learning are complete the pupil takes the final exam(orange) which has never seen before questions.
See this post for a detailed explanation difference-test-validation-datasets/